if-else语句,是非常简单,也是非常基础的条件语句。在Java中我们已经非常熟悉它的逻辑了,在这里,我们重点关注在Shell中的语法
if [ 条件判断 ]
then
条件成立的执行逻辑
fi
或者
if [ 条件判断 ] ; then
条件成立的执行逻辑
fi
案例:
#!/bin/bash
A=$1
if [ $A == "stop" ]
then
systemctl stop firewalld
fi
注意事项:
if [ 条件判断式1]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
...省略更多条件
else
当所有条件都不成立时,最后执行此程序
fi
案例1:
#!/bin/bash
read -p "please input your name:" NAME
echo $NAME
if [ $NAME == root ]
then
echo "hello ${NAME}, welcome !"
elif [ $NAME == tom ]
then
echo "hello ${NAME}, welcome !"
else
echo "oh, get out here !"
fi
案例2:
编写一个坐车脚本,要求:
脚本名字: home.sh
逻辑: 从外面传入一个参数,根据参数判断: 1. 坐飞机,2. 坐火车,3. 坐火箭,4. 不回了
#!/bin/bash
CHOICE=$1
if [ $CHOICE == 1 ]
then
echo "坐飞机"
elif [ $CHOICE == 2 ]
then
echo "坐火车"
elif [ $CHOICE == 3 ]
then
echo "坐火箭"
elif [ $CHOICE == 4 ]
then
echo "不回了"
else
echo "输入的参数有问题啊"
fi
# 在Java中,我们学习过switch-case结构。这种结构,我们可以捕获一个变量的值,对这个变量取到的某些值进行不同的处理。在Shell中,也有类似的结构,就是case。
# case命令是一个多分支的if/else命令,case变量的值用来匹配value1、value2、value3等不同的值。
# 匹配到后,则执行跟在后面的命令,直到遇到双分号为止。
# 类似于if命令,case命令使用esac作为终止符。
# case行尾必须为单词in。
# 每个分支必须以右括号结束。
# 匹配模式中可使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
# 最后的“\*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。
# case的格式
CMD=$1
case $CMD in # case行尾必须为 变量 in,表示捕获这个变量的值
start) # 需要匹配到的值,需要以右括号作为结尾
echo "starting" # 匹配到之后,执行的逻辑语句,即一个分支
;; # 一个分支的逻辑,需要以;;作为结束,不会向下穿透
stop)
echo "stopping"
;;
*) # *表示以上分支都不满足的情况,类似于switch-case中的default
echo "please using start|stop"
;;
esac # case语句,需要以esac结束
for循环命令用来在一个列表条目中执行有限次数的命令。
比如,你可能会在一个姓名列表或文件列表中循环执行同个命令。
for命令后紧跟一个自定义变量、一个关键字in和一个字符串列表(可以是变量)。
第一次执行for循环时,字符串列表中的第一个字符串会赋值给自定义变量,然后执行循环命令,直到遇到done语句;
第二次执行for循环时,会右推字符串列表中的第二个字符串给自定义变量
依次类推,直到字符串列表遍历完。
方式一:
for N in 1 2 3
do
echo $N
done
或
for N in 1 2 3; do echo $N; done
或
for N in {1..3}; do echo $N; done
或
for N in {1,2,3}; do echo $N; done
注意事项: {}中的数字之间不能有空格
方式二:
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done
或
for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done
练习: 计算从1到100的和
#!/bin/bash
SUM=0
for((i=1;i<=100;i++))
do
SUM=$(($SUM + $i))
done
echo $SUM
while命令根据紧跟其后的命令(command)来判断是否执行while循环,当command执行后的返回值(exit status)为0时,则执行while循环语句块,直到遇到done语句,然后再返回到while命令,判断command的返回值,当得到返回值为非0时,则终止while循环。
第一种:
while [ expression ]
do
command
done
# 练习: 求1-10各个数字的平方和
#!/bin/bash
num=1
while [ $num -le 10 ]
do
sum=`expr $num \* $num`
echo $sum
num=`expr $num + 1`
done
num=1
while [ $num -le 10 ]
do
sum=$(( $num * $num ))
echo $sum
num=$(( $num + 1 ))
done
第二种:
while (( expression ))
do
command
…
done
# 练习: 求1-10各个数字的平方和
#!/bin/bash
i=1
while (( i<= 10 ))
do
sum=$(( $i * $i ))
echo $sum
i=$(( $i + 1 ))
done