shell 解释器
[root@node04 shells]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
脚本编写规范
首行描述解释器: #!/bin/bash
执行shell脚本
方式①:bash 脚本名称 脚本参数
方式②:sh 脚本名称 脚本参数
方式③:./脚本名称 脚本参数【./脚本名称之间没有空格】
变量声明
变量名=”值”【中间不能有空格】
变量名要求 字母或下划线或数字(开头不能是数字)构成
删除变量 只读变量
删除 unset 变量名
只读 readonly 变量名
字符串使用
双引号(””):内部可以使用变量
单引号(‘’):内部所有的原样输出
反引号(``):表示可执行
字符串长度及截取
长度: echo ${#skill}
截取: echo ${str:2:2} 【在第二个字符开始截取截取两位】
脚本参数传递
bash 脚本名 参数1 参数2 参数3 。。。。。。
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与 ∗ 相 同 , 但 是 使 用 时 加 引 号 , 并 在 引 号 中 返 回 每 个 参 数 。 如 " *相同,但是使用时加引号,并在引号中返回每个参数。 如" ∗相同,但是使用时加引号,并在引号中返回每个参数。如"@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
算数运算符
加法计算
expr 2 + 2
【注意空格】
乘法计算expr 2 \* 2
【注意空格】
流程控制if
if [ $a -gt 10 ];then
代码1
elif [ $a -lt 10 ];then
代码2
else
代码3
fi
关系运算符
运算符 | 说明 | 英文 | 举例 |
---|---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | equal | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | not equal | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | greater than | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | less than | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | Greater than or equal to | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | Less than or equal to | [ $a -le $b ] 返回 true。 |
循环
For 循环
for aa in XXXX do 循环体 done
While循环
while 条件 ; do 循环体 done
跳出循环
跳出所有循环 break
跳出当前循环,进入下一次循环 continue
case () case 值 in 结果1) 结果1对应的操作;; 结果2) 结果2对应的操作;; 结果3) 结果3对应的操作;; esac
接收控制台数据
read 变量名
函数的使用
函数声明: [function] 函数名(){
函数体
$参数1
$参数2
$参数3
}
函数调用
函数名 参数1 参数2 参数3
数组
数组声明: 数组名称=(元素1 元素2 元素3 元素4)
数组的使用
单个使用 echo 数组名[角标] 【角标从0开始】
遍历数组
for var in ${my_arr[*]}
do
echo $var
done
文件加载
在文件中添加 . 脚本名称 或者 source 脚本名称
#!/bin/bash
source ./test1.sh # 加载test1.sh 的文件内容