shell编脚本概述和变量解释

shell的基本概述和规范

shell面向的对象

面向过程语言

(开发的时候,需要一步一步的执行)

  • 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理

  • 问题规模小,可以步骤化,按部就班处理

  • 以指令为中心,数据服务于指令

  • c,shell

面向对象语言(开发的时候将任务当作一个整体)

  • 将编程看成是一个事物,对外界来说,事物是直接使用的,不用关心事物内部的情况。而编程就是设置事物能够完成功能.

  • 一种认识世界、分析世界的方法论。将万事万物抽象为各种对象

  • 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合

  • 对象是类的具象,是一个实体

  • 问题规模大,复杂系统

  • 以数据为中心,指令服务于数据

  • java,python,golang等 云 go k8个字母s 平台

shell的概述

是将人类使用的高级语言转换成二进制,也可以将二进制翻译成高级语言。

人类写了个命令集合,用bash(shell)去翻译给硬件执行。

shell脚本的概念

  • 将要执行的命令按顺序保存到一个文本文件

  • 给该文件可执行权限

  • 可结合各种shell控制语句以完成更复杂的操作

shell脚本应用场景

  • 重复性操作

  • 交互性任务

  • 批量事务处理

  • 服务运行状态监控

  • 定时任务执行

shell编程规范

编写脚本代码

  • 使用vim文本编辑器

  • 每行一条linux命令,按执行顺序一次编写

shell脚本的组成(脚本名最好以.sh结尾,shell语法会高亮)

1.脚本申明(解释器):第一行开头“#! /bin/bash”。表示此行以下的代码语句是由shell语言编写

2.注释信息:以#开头的语句表示为注释信息。

3.可执行语句:比如echo命令用于输出“ ”之间的字符串。

shell执行脚本

1.直接调用shell解释器加上脚本的名字,bash + 脚本名 。不需要加权限

2.路径/脚本 路径:绝对路径或相对路径,而且需要x权限(加上执行权限:chmod +x 文件名)

3.source(.) 加脚本名字(不建议使用,会修改当前bash环境)

如果你想让脚本全局运行或者可以补全,要将脚本放入$PATH路径下

使用1和2执行脚本,是会新开一个bash环境去执行,不影响当前bash环境,而如果使用3去执行脚本,会直接在当前环境执行。

脚本执行逻辑和执行方式

脚本执行逻辑

1.顺序执行:程序按从上到下顺序执行

2.选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行。

3.循环执行:程序执行过程中需要重复执行多次某段语句。

脚本错误及调试

1.命令错误:不会影响接下来的命令执行,但是本条错误的命令不执行。

bash -x 脚本:模拟执行后,发现错误

2.语法错误:直接导致脚本无法运行。

bash -n 脚本:检查语法错误(在哪一行错了)(出错的行数不一定是正确的,上下左右)

3.逻辑错误:只能自己去筛查

shell脚本(安全选项)

set -e:在脚本里加,一旦出错立即停止

set -u:变量不存在不让执行

变量:如:dir =/opt

重定向与管道操作

--stdin管道操作

将管道符号“ | ”左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道

管道符“|”

将第一个命令的结果当作后一个命令的处理对象。

pa aux |wc -l
echo "abc123" |passwd --stdin zhangsan

重定向(标准输出、错误输出、标准输入)

默认电脑数据的输出方向是屏幕

1.标准输出:

你发了一条指令给电脑操作, 电脑会回复结果给你,结果是一定显示在屏幕上,称为标准输出

2.错误输出:

如果电脑没有正确回复,称为错误输出

3.标准输入:

我们通过 键盘 标 扫描仪 话简 等设备输入给电脑的指令

交互式硬件设备

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

重新定向操作:改变输出方向

1.输出到别的终端设备(tty查看本机名)

2.输入到文件中

“ > 覆盖”

“ >> 添加”

类型操作符用途
重新定向输入<从指定文件读取数据
重新定向输出>将标准输出结果保存到指定的文件,并且覆盖原有文件
>>将标准输出结果添加到指定文件的末尾,不覆盖原有内容
标准错误输出2>将错误信息保存到指定文件,并且覆盖原有的文件
2>>将错误信息追加到指定文件尾部,不覆盖原有内容
混合输出&>将标准输出,标准错误保存到同一文件中
2>&1将标准错误输出重新定向到标准输出
useradd zhangsan  #创建一个用户
echo"123456" > zhangsan.txt #把密码输出到文件
​
passwd --stdin zhangsan < zhangsan.txt  #从文件里读取密码
​
命令输错了会报错,当不想看到报错时,可以把它藏到文件里显示
如:li 2> aaa.txtcat查看就可以查看到报错了li 2>> aaa.txt   #同上性质,只是会添加不会覆盖la &>> aaa.txt   #同样>>,只会添加不会覆盖ll &> aaa.txtll > aaa.txt  2>&1   #2>&1效果和&>一样
​

shell脚本变量

变量的作用:用来存放系统和用户需要使用的特定参数

变量:值可以变化的

常量:值不可以变化

变量名:使用固定的名称,由系统预设或用户定义

变量值:能够根据用户设置、系统环境的变化而变化

shell不分数据类型(统一将所有的数据类型看作字符串)

变量的类型

1.自定义的变量:由用户自己定义、修改和使用

2.预定义变量 :bash中内置的一类变量

3.环境变量 :由系统维护,用于设置工作环境

env可以看到所有环境的变量

4.只读变量:常量

只可以读不可以改

5.位置变量:通过命令行给脚本程序传递参数

自定义变量

要求方式
设置变量变量名=变量值 两边没有空格
调用变量echo $变量名
删除变量unset 变量名
重新定义变量变量名=变量值
追加变量值变量名+=变量值

命名要求

  • 区分大小写

  • 不能使程序中的保留字和内置变量: 如: if,for,hostname 命令 a=

  • 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线“ - ”,和主机名相反

  • 不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

  • 大驼峰StudentFirstName

  • 小峰studentFirstName

  • 下划线 student_name

变量的特殊符号

${}:定义了变量名的范围

“ ” :变量在双引号里可以识别,弱引用

‘ ’ :变量在单引号里不被识别,强引用

``:反撇号,代表调用命令执行的结果,同理别名。将一串命令重新定义,效果等于$( )

name=hyh   #变量名=变量值
age=233    #变量名=变量值
​
echo "$name $age"
hyh 233
​
echo '$name $age'    #单引号内$视为普通字符
$name $age
​
echo $(ls /opt)   
123 rh#反撇号和括号使用结果都一样,提取命令执行后的结果
echo 'ls /opt'   
123 rh
​

变量追加值

格式:title=cto

title+=ylc #变量名+=追加值

[root@localhost opt]# hyh=原神
[root@localhost opt]# hyh+=启动
[root@localhost opt]# echo $hyh
原神启动
​
修改环境变量:
PATH+=:/data
​
vim /etc/profile
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data"

查看变量的值:

echo $变量名

name=hyh   #变量名=变量值
age=233    #变量名=变量值
​
echo  $name$age
hyh233#输出多个变量的值加空格和不加空格的区别
echo $name $age
hyh 233
#如果变量名后跟了别的字符传,记得把变量名加上大括号区别开
如:
echo ${name}$age
hyh233
echo ${name} $age
hyh 233
​
echo ${name}lisi
hyhlisi
echo ${name} lisi
hyh lisi

变量作用范围

  • 默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用

  • 可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用

设置变量的作用范围(临时的)

格式1:export 变量名

格式2:export 变量名=变量值 (指定该变量在任何环境下都能使用)

  • 可以使用pstree 查看shell的环境

  • 输入bash进入子shell环境

  • ctrl+D组合键或者输入exit 命令,退出子shell环境

整数的运算

expr只能进行整数的运算 格式:expr 变量1 运算符 变量2[运算符 变量3] 运算符 : 加法 + 减法 - 乘法 \ * 除法 / 取余 %

let  sum=1+2
​
echo $sum 
​
3
let var=算术表达式
let sum=1+2
sum=1+2$((var=算术表达式))和上面等价
((sum=1+2))
echo $sumvar= S[算术表达式]
​
var=$(expr argl arg2 arg3 ...)
​
var= expr argl arg2 arg3...'
​
echo'算术表达式’ |bc
​
​
sum=$[ ] 计算

[root@test1 ~]# vim ji.sh
#!/bin/bash
read -p "请输入第一个整数" num1
read -p "请输入第二个整数" num2
#执行加法运算
sum=`expr $num1 + $num2`
echo "运算结果为$sum"
[root@test1 ~]# chmod +x ji.sh
[root@test1 ~]# ./ji.sh 
请输入第一个整数6
请输入第二个整数9
运算结果为15
​

环境变量

  • 环境变量由系统提前创建,用来设置用户的工作环境

  • 使用env命令可以查看到当前工作环境下的环境变量

  • 变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录

  • 变量PATH表示可执行程序的默认搜索路径

/etc/profile

#只要开机或者用户登录就下载里面的配置文件

/etc/bashrc

#每次用户登录的时候也会加载里面的配置,主要是加载功能和别名用的

~/.bashrc

#当前用户每切换一次shell环境都会自动执行,会加载/etc/bashrc

~/bash_profile

#每次用户登录的时候也会加载里面的配置,主要是加载功能和别名用。

修改环境变量:

PATH+=:/data   #将/data目录添加到搜索路径
​
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data
​
export PATH=:/data  #输出全局变量

环境变量的全局配置文件为/etc/profile,在此文件中定义的变量作用于所有用户,在每次电脑开机时都会加载这个文件。每个用户还有自己的独立配置文(~/.bash_profile)。可以用来长期变更或设置某个环境变量

预定义变量(前面加echo显示)

bash 帮你定义好了 拿来用就可以了

$?:表示上一条命令执行后的返回状态,返回值0表示执行正确,非0值则表示出现异常。

$#:表示命令行中位置参数的个数

$0:表示当前执行的脚本或程序的名称

$$:表示当前bash的pid

$!:后台任务最后一个id

$*:代表返回所有参数(所有参数当成一个整体返回)

$@:代表返回所有参数(每个参数是独立的个体)

位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

#!/bin/bash
echo "$1"            位置1
echo "$2"            位置2
echo "${10}"         位置10
echo "$10"           位置1和0
echo "$*"            将所有项当成一个值
echo "$@"            所有项
echo "$0"            脚本自身
echo "$#"            后面参数的个数
​
​
[root@test1 ~]# ./1.sh {1..10}
1 
2
10
10
1 2 3 4 5 6 7 8 9 10

变量的命令

bash

相当于一个多开的桌面

显示当前bash的pid号:echo $$

readonly

命令设置只读变量(无法修改无法删除)

product=benet
readonly product       #设置为只读变量
​
echo $product
product=accp           #只读变量不可以被重新赋值
​
unset product          #只读变量不可以被删除,unset命令用于删除变量
​

read命令获取输入内容

方法一: read -p "提示信息" 变量名 echo $变量名

方法二: echo -n “提示信息” read变量名 echo $变量名

read -p "你在干什么?" you     #定义you这个变量名的变量值提示信息    变量名
你在干什么? 玩原神
echo $    you
玩原神     #变量值

脚本示例:

脚本搭建yum仓库

#!/bin/bash
mount /dev/sr0  /mnt
cd /etc/yum.repos.d
mkdir  bak
mv *.repo  bak
​
echo "
[hyh]
name=hyh
baseurl=file:///mnt
gpgcheck=0
"  >  hyh.repo
​
yum clean all   &>/dev/null  #显示的内容放入垃圾箱
yum makecache   &>/dev/null  #显示的内容放入垃圾箱

建立一个简单的计算器脚本

注意一定要用英文符号

建立一个显示本机配置属性脚本

建立自动分区的脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

澳洲猫罐头如何?我亲自喂养过的优质猫罐头分享

猫罐头要符合三点&#xff1a;营养配方完整均衡、原料新鲜优质、生产工艺科学可靠。只有具备这些特点&#xff0c;才是品质上乘的猫罐头。 猫罐头的三个要素&#xff0c;一个都不能少。配方不均衡&#xff0c;营养就不足&#xff1b;原料不新鲜&#xff0c;生产出来的猫罐头就…

NX二次开发UF_CAM_ask_lower_limit_plane_data 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;里海NX二次开发3000例专栏 UF_CAM_ask_lower_limit_plane_data Defined in: uf_cam_planes.h int UF_CAM_ask_lower_limit_plane_data(tag_t object_tag, double origin [ 3 ] , double normal [ 3 ] ) overview 概述 Query …

鸿蒙开发|鸿蒙系统项目开发前的准备工作

文章目录 鸿蒙项目开发的基本流程介绍鸿蒙项目开发和其他项目有什么不同成为华为开发者-注册和实名认证1.登录官方网站 鸿蒙项目开发的基本流程介绍 直接上图&#xff0c;简单易懂&#xff01; 整个项目的开发通过4个模块进行&#xff1a;开发准备、开发应用、运行调试测试和发…

关于使用宝塔页面Nginx的一些注意事项:Nginx不生效情况,以及解决方案

判断Nginx是否正常运行 使用宝塔页面保存Nginx配置后&#xff0c;有的时候不生效&#xff0c;这就说明Nginx没有正常运行 可以通过以下几种方式排查 通过宝塔 如果能够打开负载状态&#xff0c;说明Nginx运行正常 如果打不开&#xff0c;说明肯定是配置文件或者什么导致ngi…

NameServer源码解析

1 模块入口代码的功能 本节介绍入口代码的功能&#xff0c;阅读源码的时候&#xff0c;很多人喜欢根据执行逻辑&#xff0c;先从入口代码看起。NameServer部分入口代码主要完成命令行参数解析&#xff0c;初始化Controller的功能。 1.1 入口函数 首先看一下NameServer的源码目…

代码随想录算法训练营第五十九天丨 单调栈02

503.下一个更大元素II 思路 做本题之前建议先做739. 每日温度 (opens new window)和 496.下一个更大元素 I (opens new window)。 这道题和739. 每日温度 (opens new window)也几乎如出一辙。 不过&#xff0c;本题要循环数组了。 关于单调栈的讲解我在题解739. 每日温度 …

el-table 对循环产生的空白列赋默认值

1. el-table 空白列赋值 对el-table中未传数据存在空白的列赋默认值0。使用el-table 提供的插槽 slot-scope&#xff1a;{{ row || ‘0’ }} 原数据&#xff1a; <el-table-column label"集镇" :propcity ><template slot-scope"{row}">{{…

Vue实现表单效验

第一步&#xff1a;首先给form表单绑定一个rules属性 和 ref属性 <el-form :model"addFroms" label-position"right" :rules"rules" ref"ruleFormRef" label-width"100px"></el-form> 第二步&#xff1a;获取表…

TCC简介

TCC TCC&#xff08;Try-Confirm/Cancel&#xff09;是一种分布式事务处理模型&#xff0c;旨在解决分布式系统中的事务一致性问题。 三阶段 Try阶段&#xff1a; 在这个阶段&#xff0c;业务参与者尝试执行事务&#xff0c;并执行相应的业务逻辑。该阶段用于检查事务执行的…

007 OpenCV霍夫变换

目录 一、环境 二、霍夫变换原理 三、代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、霍夫变换原理 OpenCV中的霍夫变换是一种用于检测图像中直线和圆的算法。它基于图像中像素的分布情况&#xff0c;通过统计像素点之间的…

2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-C

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C 一、竞赛时间 总计&#xff1a;360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略设置 A-3 流量完整性保护 A-4 …

基于springboot实现智能热度分析和自媒体推送平台系统项目【项目源码】计算机毕业设计

基于springboot实现智能热度分析和自媒体推送平台演示 系统开发平台 在该自媒体分享网站中&#xff0c;Eclipse能给用户提供更多的方便&#xff0c;其特点一是方便学习&#xff0c;方便快捷&#xff1b;二是有非常大的信息储存量&#xff0c;主要功能是用在对数据库中查询和编…

纯CSS实现炫酷文本时钟

如图所示这是一个纯本文时钟效果,和传统的时钟不一样,没有表盘,也没有完整到每一分钟的数字表示当前时刻。 在这个时钟中,当前时间通过文本显示,显示的文本时间误差为+/- 4分钟,以明亮的颜色突出显示当前时间,而其余字母则较暗。 实际上这是一个实现很复杂的时钟,因为…

EOCR电机保护器的日常维护与保养技巧

EOCR是由施耐德韩国公司生产的电动机保护系列产品&#xff0c;由电子器件和互感器等部件组成&#xff0c;在正常状态下使用都有各自的机械寿命和电气寿命,若操作不当或异常条件下会加速电器元件的老化&#xff0c;缩短保护器的使用寿命&#xff0c;所以电机保护器的正确使用和正…

css 实现文字流光效果

经过调研发现大多滑块验证码中&#xff0c;有一些文字流光效果&#xff0c;因此在这里简单实现一下。 实现主要利用background 渐变背景以及backgorund-clip:text实现。具体代码如下 css部分 .slide {width: 300px;height: 40px;border: 1px solid #ccc;border-radius: 8px;…

提升工作效率,使用AnyTXT Searcher实现远程办公速查公司电脑文件——“cpolar内网穿透”

文章目录 前言1. AnyTXT Searcher1.1 下载安装AnyTXT Searcher 2. 下载安装注册cpolar3. AnyTXT Searcher设置和操作3.1 AnyTXT结合cpolar—公网访问搜索神器3.2 公网访问测试 4. 固定连接公网地址 前言 你是否遇到过这种情况&#xff0c;异地办公或者不在公司&#xff0c;想找…

linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解

一 、根据端口号 查看文件的部署位置 1.1 使用查看端口号对应的进程信息 方式一 &#xff1a; 使用netstat命令 netstat -tuln | grep 端口号-t&#xff1a;显示TCP连接 -u&#xff1a;显示UDP连接 -l&#xff1a;仅显示监听状态的连接 -n&#xff1a;以数字形式显示端口…

如果在手机没有root的情况下完成安卓手机数据恢复

您是否不小心从安卓设备中删除了重要数据&#xff1f; 担心如何取回您的照片、视频和文档&#xff1f; 有时您可能会不小心删除重要数据并使用安卓 root方法取回文件。 许多用户不喜欢根植他们的安卓设备&#xff0c;因为这是一种复杂的方法。 在本指南中&#xff0c;我们将向您…

控制您的音乐、视频等媒体内容

跨多个 Chrome 标签页播放音乐或声音 在计算机上打开 Chrome 。在标签页中播放音乐、视频或其他任何有声内容。您可以停留在该标签页上&#xff0c;也可以转到别处。要控制声音&#xff0c;请在右上角点击“媒体控件”图标 。您可暂停播放、转到下一首歌曲/下一个视频&#xf…