shell编程条件测试
Shell条件判断初始
Shell分支if语句
Shell循环for语句
Shell分支case语句
Select列表select循环
Shell 循环控制continue,break,exit
Shell循环while语句
Shell条件判断初始
[ ] 表示条件测试,扩展为test命令
[ ] 注意这里的空格很重要。要注意在'['后面和']'前面都必须要有空格
例如:
STRING1 = STRING2 字符串相等
STRING1 != STRING2 字符串不等
[root@linux ~]# test "root" = "root"
[root@linux ~]# echo $?
0
[root@linux ~]# test "root" = "Root"
[root@linux ~]# echo $?
1
[root@linux ~]# [ "root" != "ROOT" ]
[root@linux ~]# echo $?
0
$RANDOM%10随机数取余数0-9
guess=$(($RANDOM%10+1))
已非交互的方式自动正规填入密码123(避免交互)
echo 123 | passwd --stdin user$i &> /dev/null
整数判断
INTEGER1 -eq INTEGER2 相等
INTEGER1 -ge INTEGER2 大于等于
INTEGER1 -gt INTEGER2 大于于
INTEGER1 -le INTEGER2 小于等于
INTEGER1 -lt INTEGER2 小于
INTEGER1 -ne INTEGER2 不等于
例如:
[root@linux ~]# [ 100 -gt 90 ]
[root@linux ~]# echo $?
0
文件类型判断
-d FILE 文件存在并是一个目录
-e FILE 文件存在
-f FILE 文件存在并是一个普通文件(ls -l 第一位是 -)
-s FILE 文件存在并不是空文件
文件权限判断
-r FILE 文件存在并具有读权限
-w FILE 文件存在并具有写权限
-x FILE 文件存在并具有执行(或搜索)权限
Shell分支if语句
- 单分支结构
if [ 条件1 ]
then 动作1
fi
[root@linux ~]# cat test.sh
#!/bin/bash
if [ -f /etc/passwd ]
then
echo "This is a file"
fi
- 双分支结构
if [ 条件1 ]
then 动作1 条件真时做动作
else
动作2 条件假时做动作
fi
[root@linux ~]# cat test.sh
#!/bin/bash
if [ -f /etc/vsftpd/vsftpd.conf ]
then
service vsftpd start
else
echo "vsftpd is not install"
fi
提示输入一个用户名字,判断该用户是否存在?存在显示其信息(uid gid 家目录 shell),不存在添加该帐号
#!/bin/bash
read -p "输入用户名: " username
if id $username &> /dev/null
then
echo "用户存在,显示信息"
grep $username /etc/passwd | cut -d':' -f 1,3,4,6,7
else
echo "用户$username不存在,添加用户"
useradd $username
fi
- 多分支结构
判断条件1是否为真,如为真,执行语句1,如果为假,判断条件2,若条件2为真,执行语句2… ,若所有条件都为假,执行语句n。
if [ 条件1 ]
then 动作1
elif [ 条件2 ]
then 动作2
... ...
else
动作n
fi
[root@linux ~]# cat test.sh
#!/bin/bash
guess=$(($RANDOM%100+1))
read -p "请输入1-100 整数: " NUM
if [ $NUM -eq $guess ]
then
echo "congratulation"
elif [ $NUM -gt $guess ]
then
echo "big!!! try again !!!"
else
echo "small!!! try again !!!"
fi
Shell循环for语句
for 变量 in 值1 值2 值3 ... ...
for ((i=1;i<=5;i++))
do
动作1
动作2
... ...
done
[root@linux ~]# for ((i=1;i<=5;i++)); do echo $i ; done
Shell分支case语句
case 变量 in
模式1)
动作1
;;
模式2)
动作2
;;
... ...
模式N)
动作N
;;
*)
动作
;;
esac
[root@linux ~]# cat test.sh
#!/bin/bash
read -p "请出示身份:" name
case name in
captain)
echo "队长别开枪!是我~"
;;
hulk)
echo "你喝三鹿奶粉的么?"
;;
ironman)
echo "你的铁甲哪儿买的?"
*)
echo ”输入信息的提醒“
;;
esac
select列表循环
select 变量 in 命令1 命令2 命令3 ... ...
do
动作
done
[root@linux ~]# cat est.sh
#!/bin/bash
select i in date cal pwd
do
$i
done
[root@linux ~]# ./test.sh
1) date
2) cal
3) pwd
#? 1
Sun Nov 16 18k49k45 CST 2014
Shell 循环控制continue,break,exit
break 跳出整个循环
continue 跳出当前循环,不再执行continue后面的语句,进入下一个循环。
exit 直接退出
[root@linux ~]# cat test.sh
#!/bin/bash
# continue
for i in {1..10}
do
if [ $(($i%3)) -eq 0 ]
then
# continue 跳出本次循环回到上面的for循环
# break 跳出整个循环
else
echo ”$i“
done
Shell循环while语句
当 while后的条件为真时,就执行do和done之间的语句,直到条件为假结束。
while 条件
do
动作1
动作2
... ...
done
死循环
[root@linux ~]# while true ; do echo 1 ; done
[root@linux ~]# cat tset.sh
#!/bin/bash
x=0
while [ $x -le 10 ]
do
echo $x
done