true
[root@centos6mini 3.19]# [ -z ]&& echo true #空为真
true
[root@centos6mini 3.19]# [ -z "" ]&&echo true #空为真
true
[root@centos6mini 3.19]# [ -z "1" ] && echo true "#非空为假
[root@centos6mini 3.19]# [ -z " " ] && echo true #非空为假
扫描/etc/passwd文件每一行,如发现GECOS字段为空,则填充用户名和单位电话为62985600,并提示该用户的GECOS信息修改成功。
#!/bin/bash
cat /etc/passwd |while read userline;do #用管道实现给循环while赋值
if [ -n "$(echo $userline |cut -d: -f5)" ];then #-n "1" 非空为真
continue #为真时啥都不做
else
username=$(echo $userline|cut -d: -f1)
usermod -c $username-62985600 $username
echo $username's gecos already changed!
fi
done
特殊用法
双小括号方法,即((…))格式,也可以用于算术运算
双小括号方法也可以使bash Shell实现C语言风格的变量操作
I=10
((I++))
for循环的特殊格式:
for ((控制变量初始化;条件判断表达式;控制变量的修正表达 式))
do
循环体
done
控制变量初始化:仅在运行到循环代码段时执行一次
控制变量的修正表达式:每轮循环结束会先进行控制变量修 正运算,而后再做条件判断

练习:计算从1加到100的和。
#!/bin/bash
sum=0
for ((i=1;i<=100;i++));do
let sum+=i
done
echo sum=$sum
unset sum i
sum=0
i=1
while [ $i -le 100 ];do
let sum+=i
let i++
done
echo sum=$sum
select循环与菜单
select variable in list
do
循环体命令
done
select 循环主要用于创建菜单,按数字顺序排列的 菜单项将显示在标准错误上,并显示 PS3 提示符, 等待用户输入
PS3="Please choose your menu: "
用户输入菜单列表中的某个数字,执行相应的命令
用户输入被保存在内置变量 REPLY 中
[root@centos6mini 3.19]# ./linshi
1) huangmenji
2) huimian
3) hulatang
4) roujiamo
Please choose your menu: 1
The price is $15
Please choose your menu: 2
The price is $10
Please choose your menu: 3
The price is $8
Please choose your menu: 4
The price is $6
Please choose your menu: 5
get out
[root@centos6mini 3.19]# cat ./linshi
#!/bin/bash
select menu in huangmenji huimian hulatang roujiamo;do
case $REPLY in
1) echo "The price is $15";;
2) echo "The price is $10";;
3) echo "The price is $8";;
4) echo "The price is $6";;
*) echo "get out";break;;
esac
done
信号捕捉trap
trap '触发指令' 信号
自定义进程收到系统发出的指定信号后,将执行触发指令 ,而不会执行原操作
trap '' 信号 忽略信号的操作










