1. shell变量
- shell变量不需要声明,赋值即可定义变量,变量与等号之前不可以空格。
- 使用时只要在变量名前加$即可,可选择性的用大括号将变量括起来;
- 使用 readonly 命令可以将变量定义为只读变量 ;
- 使用 unset 命令可以删除变量 ,但不能删除只读变量;
- 字符串变量可用单引号、双引号括起来,单引号将内容原样输出,双引号可以变量替换和输入转义字符。
2. shell获取参数的特殊符号
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、
以"$1" "$2" … "$n" 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
3. shell 运算符
shell支持多种运算符,但不支持简单的算术运算,要借助其它的命令来实现,如expr,要注意几点:
- 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,
- 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号
- 条件表达式要放在方括号之间,并且要有空格,
- 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
关系运算符:( 假设 a=10,b=20 )
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 大于 | [ $a -gt $b ] 返回 false。 |
-lt | 小于 | [ $a -lt $b ] 返回 true。 |
-ge | 大于等于 | [ $a -ge $b ] 返回 false。 |
-le | 小于等于 | [ $a -le $b ] 返回 true。 |
! | 取反 | [ ! false ] 返回 true |
-o 、|| | 或运算 | [ $a -lt 20 -o $b -gt 100 ] 返回 true |
-a 、&& | 与运算 | [ $a -lt 20 -a $b -gt 100 ] 返回 false |
字符串运算符(假设 a="abc", b ="def")
运算符 | 说明 | 举例 |
= | 是否相等 | [ $a = $b ] 返回 false。 |
!= | 是否不相等 | [ $a != $b ] 返回 true |
-z | 字符串长度是否为0 | [ -z $a ] 返回 false |
-n | 字符串长度是否不为0 | [ -n $a ] 返回 true |
str | 字符串是否为空 | [ $a ] 返回 true。 |
文件测试运算符
运算符 | 说明 | 举例 |
-b file | 文件是否是块设备文件 | [ -b $file ] |
-c file | 文件是否是字符设备文件 | [ -c $file ] |
-d file | 文件是否是目录 | [ -d $file ] |
-f file | 文件是否是普通文件(既不是目录,也不是设备文件) | [ -f $file ] |
-g file | 文件是否设置了 SGID 位 | [ -g $file ] |
-k file | 文件是否设置了粘着位(Sticky Bit) | [ -k $file ] |
-p file | 文件是否是有名管道 | [ -p $file ] |
-u file | 文件是否设置了 SUID 位 | [ -u $file ] |
-r file | 文件是否可读 | [ -r $file ] |
-w file | 文件是否可写 | [ -w $file ] |
-x file | 文件是否可执行 | [ -x $file ] |
-s file | 文件是否为空 | [ -s $file ] |
-e file | 文件(包括目录)是否存在 | [ -e $file ] |
4 shell流程控制
条件语句
#if语句
if condition
then
command;
fi
#if else语句
if condition
then
command;
else
commend;
fi
#if else-if语句
if condition
then
command;
elif condition
then
commend;
else
commend;
fi
for 语句
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
while 循环
while condition
do
command
done
#永真循环
while :
do
command
done
while true
do
command
done
until
until condition
do
command
done
Case
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
注意使用;;结束一个条件的执行,使用 * 捕获没有匹配的情况。
5. shell文件包含
使用.加空格或sources将shell脚本引入。