【Shell】shell编程条件测试if,for,case,select,while

shell编程条件测试

Shell条件判断初始
Shell分支if语句
Shell循环for语句
Shell分支case语句
Select列表select循环
Shell 循环控制continue,break,exit
Shell循环while语句

Shell条件判断初始

[ ]  表示条件测试,扩展为test命令
[ ]  注意这里的空格很重要。要注意在'['后面和']'前面都必须要有空格

例如:
STRING1  = STRING2  字符串相等
STRING1 != STRING2  字符串不等
[root@linux ~]# test "root" = "root"
[root@linux ~]# echo $?
0
[root@linux ~]# test "root" = "Root"
[root@linux ~]# echo $?
1
[root@linux ~]# [ "root" != "ROOT" ]
[root@linux ~]# echo $?
0


$RANDOM%10随机数取余数0-9
guess=$(($RANDOM%10+1))


已非交互的方式自动正规填入密码123(避免交互)
echo 123 | passwd --stdin user$i &> /dev/null



整数判断
INTEGER1  -eq   INTEGER2  相等 
INTEGER1  -ge   INTEGER2  大于等于
INTEGER1  -gt   INTEGER2  大于于
INTEGER1  -le   INTEGER2  小于等于
INTEGER1  -lt   INTEGER2  小于
INTEGER1  -ne   INTEGER2  不等于
例如:
[root@linux ~]# [ 100 -gt 90 ]
[root@linux ~]# echo $?
0


文件类型判断
-d   FILE  文件存在并是一个目录
-e   FILE  文件存在
-f   FILE  文件存在并是一个普通文件(ls -l 第一位是 --s   FILE  文件存在并不是空文件


文件权限判断
-r   FILE  文件存在并具有读权限
-w   FILE  文件存在并具有写权限
-x   FILE  文件存在并具有执行(或搜索)权限


Shell分支if语句
  • 单分支结构
if [ 条件1 ] 
 then 动作1 
fi 
[root@linux ~]# cat test.sh
#!/bin/bash
if [ -f /etc/passwd ]
then
  echo "This is a file"
fi

  • 双分支结构
if [ 条件1 ] 
 then 动作1   条件真时做动作
else 
 动作2    条件假时做动作
fi 


[root@linux ~]# cat test.sh
#!/bin/bash
if [ -f /etc/vsftpd/vsftpd.conf ]
then
  service vsftpd start
else
  echo "vsftpd is not install"
fi


提示输入一个用户名字,判断该用户是否存在?存在显示其信息(uid gid 家目录 shell),不存在添加该帐号
#!/bin/bash
read -p "输入用户名: " username
if id $username &> /dev/null
  then
    echo "用户存在,显示信息"
    grep $username /etc/passwd | cut -d':' -f 1,3,4,6,7
  else
    echo "用户$username不存在,添加用户"
    useradd $username
fi

  • 多分支结构
    判断条件1是否为真,如为真,执行语句1,如果为假,判断条件2,若条件2为真,执行语句2… ,若所有条件都为假,执行语句n。
if [ 条件1 ] 
  then 动作1 
elif [ 条件2 ] 
  then 动作2 
... ... 
else 
  动作n 
fi 

[root@linux ~]# cat test.sh
#!/bin/bash
guess=$(($RANDOM%100+1))
read -p "请输入1-100 整数: " NUM
if [ $NUM -eq $guess ]
then
  echo "congratulation"
elif [ $NUM -gt $guess ]
then
  echo "big!!! try again !!!"
else
  echo "small!!! try again !!!"
fi


Shell循环for语句

for 变量 in 值123 ... ... 
for ((i=1;i<=5;i++))
do 
  动作1 
  动作2 
  ... ... 
done 

[root@linux ~]# for ((i=1;i<=5;i++)); do echo $i ; done


Shell分支case语句

case 变量 in 
模式1) 
  动作1 
;; 
模式2) 
  动作2 
;; 
... ... 
模式N) 
  动作N 
;; 
*) 
  动作 
;; 
esac 

[root@linux ~]# cat test.sh
#!/bin/bash
read -p "请出示身份:" name
case name in
captain)
  echo "队长别开枪!是我~"
;;
hulk)
  echo "你喝三鹿奶粉的么?"
;;
ironman)
  echo "你的铁甲哪儿买的?"
*)
  echo ”输入信息的提醒“
;;
esac


select列表循环

select 变量 in 命令1 命令2 命令3 ... ... 
do 
  动作 
done

[root@linux ~]# cat est.sh
#!/bin/bash
select i in date cal pwd
do
  $i
done


[root@linux ~]# ./test.sh
1) date
2) cal
3) pwd
#? 1
Sun Nov 16 18k49k45 CST 2014


Shell 循环控制continue,break,exit

break       跳出整个循环
continue    跳出当前循环,不再执行continue后面的语句,进入下一个循环。
exit        直接退出


[root@linux ~]# cat test.sh
#!/bin/bash
# continue
for i in {1..10}
do
  if [ $(($i%3)) -eq 0 ]
  then
# continue 跳出本次循环回到上面的for循环
# break 跳出整个循环
  else
    echo ”$i“
done



Shell循环while语句
当 while后的条件为真时,就执行do和done之间的语句,直到条件为假结束。

while 条件 
do 
  动作1 
  动作2 
 ... ... 
done


死循环
[root@linux ~]# while true ; do echo 1 ; done

[root@linux ~]# cat tset.sh
#!/bin/bash
x=0
while [ $x -le 10 ]
do
  echo $x
done


发布了11 篇原创文章 · 获赞 0 · 访问量 85

猜你喜欢

转载自blog.csdn.net/weixin_43658009/article/details/89054276