第6章 条件判断
1.基本语法
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ hello ]返回true,[] 返回false。
[ hello ]
echo $?
//0-true 1-false
[ 23 -ge 22 ]
echo $?
- 常用判断条件
(1)两个整数之间比较
= 字符串比较
-
-lt 小于(less than) -le 小于等于(less equal)
-
-eq 等于(equal) -gt 大于(greater than)
-
-ge 大于等于(greater equal) -ne 不等于(Not equal)
(2)按照文件权限进行判断
-
-r 有读的权限(read) -w 有写的权限(write)
-
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-
-f 文件存在并且是一个常规的文件(file)
-
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
3.案例实操
(1)23是否大于等于22
[ 23 -ge 22 ]
echo $?
0
(2)helloworld.sh是否具有写权限
[ -w helloworld.sh ]
echo $?
0
(3)/home/hadoop/cls.txt目录中的文件是否存在
[ -e /home/hadoop/cls.txt ]
echo $?
1
(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
[ condition ] && echo OK || echo notok
OK
[ condition ] && [ ] || echo notok
`notok
流程控制(重点)
if 判断
1.基本语法
if [ 条件判断式 ]
then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
2.案例实操
(1)输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。
touch if.sh
vim if.sh
#!/bin/bash
if [ $1 -eq "1" ]
then
echo "banzhang zhen shuai"
elif [ $1 -eq "2" ]
then
echo "cls zhen mei"
fi
chmod 777 if.sh
./if.sh 1
banzhang zhen shuai
case 语句
1.基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
-
case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
-
双分号“ ;; ”表示命令序列结束,相当于java中的break。
-
最后的“ )”表示默认模式,相当于java中的default, 不可以加双引号。
2.案例实操
(1)输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。
$ touch case.sh
$ vim case.sh
!/bin/bash
case $1 in
"1")
echo "banzhang"
;;
"2")
echo "cls"
;;
*)
echo "renyao"
;;
esac
$ chmod 777 case.sh
$ ./case.sh 1
1
for 循环
1.基本语法1
for ((初始值;循环控制条件;变量变化))
do
程序
done
2.案例实操
(1)从1加到100
$ touch for1.sh
$ vim for1.sh
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
s=s+$i]
done
echo $s
$ chmod 777 for1.sh
$ ./for1.sh
“5050”
3.基本语法2
for 变量 in 值1 值2 值3…
do
程序
done
4.案例实操
(1)打印所有输入参数
$ touch for2.sh
$ vim for2.sh
#!/bin/bash
#打印数字
for i in $*
do
echo "ban zhang love $i "
done
$ chmod 777 for2.sh
$ bash for2.sh cls xz bd
(2)比较@区别
(a)$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以2 …$n的形式输出所有参数。
$ touch for.sh
vim for.sh #!/bin/bash for i in* do echo "ban zhang love @ do echo "ban zhang love $j" done
$ bash for.sh cls xz bd
(b)当它们被双引号“”包含时,“1 n”的形式输出所有参数;“1” “n”的形式输出所有参数。
$ vim for.sh
#!/bin/bash
for i in "*" #*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo "ban zhang love $i" done
for j in "@" #@中的每个参数都看成是独立的,所以“j" done
$ chmod 777 for.sh $ bash for.sh cls xz bd
7.4 while 循环
1.基本语法
while [ 条件判断式 ]
do
程序
done
2.案例实操
(1)从1加到100
$ touch while.sh
$ vim while.sh
#!/bin/bash
s=0
i=1
$ chmod 777 while.sh
$ ./while.sh> while [ $i -le 100 ]
do
s=s+$i]
i=i+1]
done
echo $s
注意事项:
while后面需要有空格