if循环
-
if的基本语法:
if的基本语法:
if [ command ];then
符合该条件执行的语句
elif [ command ];then
符合该条件执行的语句
else
符合该条件执行的语句
fi
-
举例
#!/bin/bash
user=kiosk
if grep $user /etc/passwd;then
echo "Hello $user"
fi
if date;then
echo "Hello date"
fi
#!/bin/bash
user=student
if grep $user /etc/passwd;then
echo "The files for user $user are:"
ls -a /home/$user
else
echo "$user not exist!"
fi
#!/bin/bash
if [ "$1" -eq "student" ];then
echo "Welcome $1"
elif [ "$1" -eq "westos" ];then
echo "Welcome $1"
elif [ "$1" -eq "kiosk" ];then
echo "Welcome $1"
elif [ "$1" -eq "linux" ];then
echo "Welcome $1"
else
echo "You are not allowed!"
fi
-
for循环
-
语法1
for 变量 in 值1 值2 值3…
do
程序
done
#!/bin/bash
for i in `seq 1 2 10`
do
echo $i
done
#!/bin/bash 打印时间
for time in morning noon afternoon evening
do
echo "This time is $time!"
done
-
语法二
for ((初始值;循环控制条件;变量变化))
do
程序
done
在语法二中需要注意以下几点:
初始值:在循环开始时,需要给某个变量赋予初始值,如 i=1。
循环控制条件:用于指定变量循环的次数,如 i<=100,则只要 i 的值小于等于 100,循环就会继续。
变量变化:每次循环之后,变量该如何变化,如 i=i+1,代表每次循环之后,变量的值都加 1。
语法二和其他语言中的 for 循环类似,也就是事先决定循环次数的固定循环。先举一个简单的例子。
#!/bin/bash
for ((i=1;i<=5;i++))
do
echo "$i"
done
#!/bin/bash
#从 1 加到100
s=0
for(( i=1;i<=100;i=i+1))
#定义循环100次
do
((s+=i))
#每次循环给变量s赋值
done
echo "The sum of 1+2+..+100 is : $s"
#输出从1加到100的和
#!/bin/bash
#for((a=1;a<10;a++))
#for a in `seq 10`
for a in {1..10}
do
ping -c1 -w2 172.25.254.$a &> /dev/null && echo 172.25.254.$a is up || echo 172.25.254.$a is down
done
#!/bin/bash
for i in $(seq 9)
do
for j in $(seq $i)
do
echo -ne "$i*$j=$[i*j]\t"
done
echo -e "\n"
done
#!/bin/bash
read -p "输入分和秒开始倒计时:" a b
for((c=(a*60)+b;c>0;c--))
do
m=$[c/60]
s=$[c%60]
echo -n "TIME is $m:$s"
echo -ne " \r"
sleep 1
done
while循环
-
语法
while condition
do
statements
done
condition
表示判断条件,statements
表示要执行的语句(可以只有一条,也可以有多条),do
和done
都是 Shell 中的关键字。
while 循环的执行流程为:
- 先对 condition 进行判断,如果该条件成立,就进入循环,执行 while 循环体中的语句,也就是 do 和 done 之间的语句。这样就完成了一次循环。
- 每一次执行到 done 的时候都会重新判断 condition 是否成立,如果成立,就进入下一次循环,继续执行 do 和 done 之间的语句,如果不成立,就结束整个 while 循环,执行 done 后面的其它 Shell 代码。
- 如果一开始 condition 就不成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。
注意,在 while 循环体中必须有相应的语句使得 condition 越来越趋近于“不成立”,只有这样才能最终退出循环,否则 while 就成了死循环,会一直执行下去,永无休止。
-
举例
#!/bin/bash
PREFIX="westos"
i=1
while [ $i -le 10 ]
do
useradd -r ${PREFIX}$i &> /dev/null
echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
((i++))
done
#!/bin/bash
i=1
sum=0
while ((i <= 100))
do
((sum += i))
((i++))
done
echo "The sum is: $sum"
#!/bin/bash
sum=0
echo "请输入您要计算的数字,按 Ctrl+D 组合键结束读取"
while read n
do
((sum += n))
done
echo "The sum is: $sum"
-
case语句
-
语法
case 值 in
模式1)
command1
command2
command3
;;
模式2)
command1
command2
command3
;;
*)
command1
command2
command3
;;
esac
case工作方式如上所示。取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
-
举例
echo 'Input a number:'
read Num
case $Num in
1) echo 'You select 1'
;;
2) echo 'You select 2'
;;
3) echo 'You select 3'
;;
4|5) echo 'You select 4 or 5'
;;
*) echo 'default'
;;
esac
#!/bin/bash
while true
do
echo -e "
\033[31m A 显示主机IP \033[0m
\033[32m B 显示磁盘剩余空间 \033[0m
\033[33m C 显示系统运行时间 \033[0m
\033[34m Q 退出系统 \033[0m
"
read -p "请输入你的选择:" char
case $char in
a|A)
ifconfig br0 | grep "inet " | awk '{print $2}'
;;
b|B)
df -h | awk 'NR==2{print "剩余空间大小为:"$4}'
;;
c|C)
uptime |awk '{print $3}' | awk -F, '{print $1}' | awk -F: '{print "系统已经运行了"$1"小时"$2"分钟"}'
;;
q|Q)
exit 0
;;
esac
done