一 条件测试
1.类型
文件测试、数值比较、字符串比较
2.小程序
if ! test -d $1;then #测试参数1是否是目录 mkdir $1 #不是目录则创建目录 fi
if [ ! -d $1 ]; then #和上面含义相同 mkdir $1
fi
#test 命令 相当于 [ ] 命令
if [ $UID -ne 0];then #判断用户权限是否等于0 echo "no permission" exit fi if [$USER != "root"];then #判断用户是否是root echo "no permission" exit fi
通过man test 去查看所有判断选项
3.字符串比较
提示:使用双引号
["$USER" = "root"]; echo $?
["$USER" == "root"]; echo $?
[-z "$damon"] 字符长度是0
[-n "$damon"] 字符长度不是0
例子:
damon@ubuntu:~$ v1= damon@ubuntu:~$ [ -z $v1 ];echo $? 0 damon@ubuntu:~$ [ -n $v1 ];echo $? 0 damon@ubuntu:~$ [ -n "$v1" ];echo $? 1 damon@ubuntu:~$
可以看出字符串变量是否加双引号的结果是不一样的,加双引号的结果是正确的!
4.数值比较
root@ubuntu:/# [ 1 -lt 2 -a 5 -gt 10 ];echo $? 1 root@ubuntu:/# [ 1 -lt 2 -o 5 -gt 10 ];echo $? 0 root@ubuntu:/# [[ 1 -lt 2 && 5 -gt 10 ]];echo $? 1 root@ubuntu:/# [[ 1 -lt 2 || 5 -gt 10 ]];echo $? 0
5.If
#!/usr/bin/bash cat <<-EOF ########################### # A.Ross # # B.Chandler # # C.Joey # # D.Richel # # E.Fibe # # F.Monica # ########################### EOF read -p "Which person do you like best: " name if [ "$name" == "A" ];then echo "Ross" elif [ "$name" == "B" ];then echo "Chandler" elif [ "$name" == "C" ];then echo "Joey" elif [ "$name" == "D" ];then echo "Richel" elif [ "$name" == "E" ];then echo "Fibe" elif [ "$name" == "F" ]; then echo "Monica" else echo "Unknown name" fi
6.模式匹配:case
case只能进行字符串匹配
case 变量 in
模式1)
命令序列1
;;
模式2)
命令序列3
;;
*)
无匹配后命令序列
esac
例子:
#!/usr/bin/bash cat <<-EOF ########################### # A.Ross # # B.Chandler # # C.Joey # # D.Richel # # E.Fibe # # F.Monica # ########################### EOF read -p "Which person do you like best: " name case "$name" in A|a) echo "Ross" ;; B|b) echo "Chandler" ;; C|c) echo "Joey" ;; D|d) echo "Richel" ;; E|e) echo "Fibe" ;; F|f) echo "Monica" ;; *) echo "Unknown name" ;; esac
二 循环
1.for
for 变量名 [in 取值列表]
do
循环体
done
for i in `seq 4` do echo i done
2.while
while 条件
do
循环体
done
#!/bin/bash i=1 while [ $i -le 4 ] do echo "$i" i=$[$i+1] done