1、shell中比较运算符
-eq //equals等于
-ne //no equals不等于
-gt //greater than 大于
-lt //less than小于
-ge //greater equals大于等于
-le //less equals小于等于
注意:
1、在shell中进行比较时,结果为0代表真,为1代表假。
2、-eq,-ne等比较符只能用于数字比较,有字符也会先转换成数字然后进行比较。
2、shell中${x}符号代表意思说明
$$ ——Shell本身的PID(ProcessID)
$! ——Shell最后运行的后台Process的PID
$? ——最后运行的命令的结束代码(返回值)
$- ——使用Set命令设定的Flag一览
$* ——所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ ——所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$# ——添加到Shell的参数个数
$0 ——Shell本身的文件名
$1~$n ——添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
${#array_name[@]}、${#array_name[*]} --表示获取数组的长度
注意:@ 和*
相同点:都是引用所有参数
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数(分别存储在1 2 3)则"*" 等价于 “1 2 3"(传递了一个参数);而“@" 等价于 “1” “2” “$3”(传递了三个参数)
3、shell脚本常见判断语法
if [ 条件判断式 ];then # 条件判断式2边“[ ]”要留有空格
当条件判断式成立时,可以进行指令工作内容
fi # 将if反过来,即fi表示if结束之意
3.1数值判断语法
# 将网卡中断序列循环绑定到指定cpu上
irq1=`cat /proc/interrupts| grep -E ${bus} | awk -F ':' '{print $1}'`
irq1=`echo $irq1`
#cpulist=(0 1 2 3 4 5 6 7 {51..71} 93 94 95)
cpulist=({88..95})
c=0
for irq in $irq1
do
if [ $c -ge ${#cpulist[*]} ];then #-ge表示大于等于,greater equals
c=0
fi
echo ${cpulist[c]} "->" $irq
echo ${cpulist[c]} > /proc/irq/$irq/smp_affinity_list
let "c++"
done
注意:
1、条件表达式两边均应有一个空格。
2、数组下标是从0开始
3.2文件测试语句(使用指定条件来判断文件是否存在或权限是否满足等情况的运算符)
运算符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
举例说明:
例1:使用文件测试语句来判断/etc/fstab是否为一个目录类型的文件,然后通过 Shell 解释 器的内设$?变量显示上一条命令执行后的返回值。如果返回值为 0,则目录存在;如果返回值为非零的值,则意味着目录不存在:
[root@localhost ~]# [ -d /etc/fstab ]
[root@localhost ~]# echo $?
127
例2:使用文件测试语句来判断/etc/fstab是否为一般文件,如果返回值为 0,则代表文件存在,且为一般文件:
[root@localhost ~]# [ -f /etc/fstab ]
[root@localhost ~]# echo $?
0
3.3字符串比较(字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。它经常用来判断某个变量是否未被定义(即内容为空值)。字符串比较中常见的运算符如下表所示:)
运算符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 字符串内容是否为空
例1:通过判断 String变量是否为空值,进而判断是否定义了这个变量
[root@localhost ~]# [ -z $string ]
[root@localhost ~]# echo $?
0
3.4逻辑测试语句(&&、||、!)
- &&:逻辑“与”。它表示当前面的命令执行成功后才会执行它后面的命令。因此可以用来判断/dev/sda文件是否存在,若存在则输出ok字样。
[root@localhost ~]# [ -e /dev/sda ] && echo "ok"
ok
- ||:逻辑“或”。表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录的用户是否为非管理员身份:
[root@localhost ~]# [ $USER = root1 ] || echo "user"
user
- !:逻辑“非”。它表示把条件测试中的判断结果取相反值。也就是说,如果原本测试的结果是正确的,则将其变成错误的; 原本测试错误的结果则将其变成正确的。
[root@localhost ~]# [ ! $USER = root1 ] && echo "root"
root
4、shell中常见循环语句
4.1 for循环(固定循环)
for循环,又有人称之为条件循环,或者for i in ,其实就是for循环的特性,次数和给与的条件是成正比的。
# 1、常见风格
for 变量名 in 取值范围
do
命令序列
done
# 2、c语言风格
for ((expr1;expr2;expr3))
do
command
done
expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出
案例1如下:
# 第1种
for 变量名 in {list} ###变量池
do ###开始
command ###执行的命令
done ####结尾
# 第2种
for i in {a..c}
do
echo $i
done
# 第3种
for i in {1..5} //{}里面不识别变量
do
echo $i
done
案例2如下:
for ((i=1;i<=100;i++))
do
echo $i
done
4.2 while循环(不定循环,条件为真才循环)
while循环,当条件表达式满足时,就进行循环,直到条件表达式不成立时才结束。
# 语法
while [ condition ]
do
command...
done
#
while [ 1 -eq 1 ] 或者 (( 2 > 1 )) # -eq表示等于 equals
do
command
command
...
done
当条件测试成立(必须为真),返回值为0才能执行循环体
4.3 until循环(不定循环,条件为假才循环)
until循环,当条件表达式不满足时,就进行循环,直到条件表达式满足时才结束。
# 语法
until [ condition ]
do
command...
done
#
until [ 1 -ne 1 ] 或者 (( 2 < 1 )) # -ne表示等于 no equals
do
command
command
...
done
当条件测试成立(必须为假),返回值不为0才能执行循环体 (shell中真为0,假为非0)