一、 条件判断
1. 语法
- [ condition ] 括号前后需要空格
注意:条件非空即为true,[ stopping ] 返回true,[ ] 返回false
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# [ ]
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# echo $?
1
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# [ stopping ]
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# echo $?
0
2. 常用条件
-
整数之间判断
[ number1 condition number2]=字符串比较-lt小于 less than-le小等于 less equal-eq等于 equal-gt大于greater than-ge大等于 greater equal-ne不等于not equal
-
按照文件权限进行判断
[ -r filename ]- -r 有读取条件 read
- -w 有写入条件 write
- -x 有执行条件 execute
-
按照文件类型
[ -f filePath ]- -f 文件存在并且是一个常规的文件
- -e 文件存在
- -d 文件存在并且一个目录
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# [ stopping ]
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# echo $?
0
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# [ 23 -gt 22 ]
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# echo $?
0
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# [ 23 -gt 25 ]
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# echo $?
1
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# [ -r calculate.sh ]
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# echo $?
0
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# [ -d calculate.sh ]
[root@izwz9eldxtlzr8ehu1fmjbz calculate]# echo $?
二、流程控制
1. if
- 基本语法
if [ 条件判断 ]:then
执行逻辑
elif[ 条件判断 ]:then
执行逻辑
if
或者
if[ 条件判断 ]
then
执行逻辑
if
-
注意
- 条件判断左右必须是空格
- if开头,fi结尾
- if后面又空格
-
基本使用案例
#!/bin/bash
if [ $1 -eq 1 ]
then
echo '输入值为:1'
elif [ $1 -eq 2 ]
then
echo '输入值为:2'
fi
//结果
[root@izwz9eldxtlzr8ehu1fmjbz process]# sh processIf.sh 2
输入值为:2
[root@izwz9eldxtlzr8ehu1fmjbz process]# sh processIf.sh 1
输入值为:1
2. CASE 语句
-
基本语法
- ;;表示逻辑终止
- *) 相当于 default
- case语句终止是相反esac
case $key in
"val1")
执行key = val1 逻辑
;;
"val2")
执行key = val2 逻辑
;;
···
*)
执行不匹配时默认逻辑
;;
esac
-
案例说明
编写一个case条件分支,如果第一个参数为1则输出
hello stopping 1,2则输入hello stopping 2其他情况输出default#!/bin/bash case $1 in "1") echo "hello stopping 1" ;; "2") echo "hello stopping 2" ;; *) echo "default" ;; esac输出结果
[root@izwz9eldxtlzr8ehu1fmjbz process]# sh processCase.sh 1 hello stopping 1 [root@izwz9eldxtlzr8ehu1fmjbz process]# sh processCase.sh 2 hello stopping 2 [root@izwz9eldxtlzr8ehu1fmjbz process]# sh processCase.sh 3 default
3. for 循环
-
基本语法
语法一
基本上跟JAVA for循环差不对,把
{}换成了do和done
for((初始值 ; 控制条件 ; 变量变化))
do
执行逻辑
done
语法二
基本上与JAVA foreach循环差不多,把{}换成了do 和done
for val in val1 val2 val3 ...
do
执行逻辑
done
-
案例说明
- 编写for案例连续打印十次i的值
#!/bin/bash for(( i = 0 ; i < 10 ; i++)) do echo "当前i值="$i done输出结果
[root@izwz9eldxtlzr8ehu1fmjbz process]# [root@izwz9eldxtlzr8ehu1fmjbz process]# sh processFor.sh 当前i值=0 当前i值=1 当前i值=2 当前i值=3 当前i值=4 当前i值=5 当前i值=6 当前i值=7 当前i值=8 当前i值=9- 编写foreach循环读取变量
#!/bin/bash for val in $* do echo $val done for val2 in $@ do echo $val2 done输出结果
[root@izwz9eldxtlzr8ehu1fmjbz process]# [root@izwz9eldxtlzr8ehu1fmjbz process]# sh processForeach.sh 1 2 3 4 5 1 2 3 4 5 -------------------------- 1 2 3 4 5注意:这里的
$@和$*没有区别,但是把他们都加上引号作为一个整体的话,$*则会成为一个整体。输出结果:
[root@izwz9eldxtlzr8ehu1fmjbz process]# [root@izwz9eldxtlzr8ehu1fmjbz process]# sh processForeach.sh 1 2 3 4 5 1 2 3 4 5 -------------------------- 1 2 3 4 5
4. While循环
- 基本语法
while[ 条件判断 ]
do
执行逻辑
done
-
案例说明
循环遍历五次,注意这里需要声明i作为变量再进行操作。区别于for循环操作。
#!/bin/bash i=0 while [ $i -lt 5 ] do echo $i i=$[ $i+1 ] done\