设为首页 收藏本站
查看: 1194|回复: 0

[经验分享] 条件判断式if和循环语句while及其函数的应用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-6-27 17:11:53 | 显示全部楼层 |阅读模式
条件判断式

   if..then、case..esac
    if..then 是最常见的条件判断式,就是当负某个条件判断的时候,就进行某项工作 ,其中"&&"代表AND,"||"代表or
    if....then..else...fi
    格式:  

1
2
if [条件判断语句]; then 当条件判断成立时,可以进行的命令工作内容;
fi       // 结束if条件判断



    例子:设定  A=3,判断,如果A要是等于3,就会显示3                              

1
2
3
if [ $A = 3 ]; then                                                         
            ehco "true"                                                            
fi



1、当条件不满足时的条件判断                                          

1
2
3
4
5
if [ $A = 3 ]; the                                                           
    echo "true"  // 当A=3的时候就显示true                              
else                                                                        
    echo "error" // 当A不等于3的时候就显示error                        
fi



2、当多个条件判断时  if..then..elif...then..fi
1
2
3
4
5
6
7
8
9
if [ $A = 3 ];then
  echo "3"          //  当A等于3的时候,就显现3
elif [ $A = 4 ]; then
  echo "4"          //  当A等于4的时候,就显现4
elif [ $A = 5 ];then
  echo "5"          //  当A等于5的时候,就显现5
else  
  echo "error"     //  当A即不等于3也不等于4也不等于5的时候,就显现error
fi



3、当多层次的条件判断时,而且有多个既定的变量内容,就可以用到case..in..esac。它的语法如下:
1
2
3
4
5
6
7
8
9
10
11
12
case $变量名称 in
    "第一个变量取值")
        语句
        ;;            //  每个判断语句结束都要有双分号隔开   
    "第二个变量取值")
        语句                                          
        ;;
    *)             //  其它变量的取值*号表示  
        语句                                                                     
        exit                                          
        ;;
esac           // case的结尾



   例:假如A在2、3这2个数之间取值,假如A等于2就显示2,等于3就显示3,既不是2也不是3就显示other
1
2
3
4
5
6
7
8
9
10
11
12
13
read -p "input a: " A
case $A in
  2)         
    echo "2"      // 如果A的取值为2,则就显示2
;;                //  每个判断语句结束都要有双分号隔开
  3)
    echo "3"     // 如果A的取值为3,则就显示3
;;
  *)
    echo "other" // 如果A的取值即不为2也不为3,则就显示other
exit             //  退出判断
;;
esac




循环式
㈠循环式 while..do..done 、 until..do..done 、  for..do..done

   while循环就是当条件成立时,就不断的循环,直到条件不满足才停止循环,格式如下:
1
2
3
while  [ 条件判断] ; do
    当条件满足的时候需要循环的程序
done




    例子:用户输入任意字符时,我们都显示,你输入的是: 只有当用户输入Q或q时,我们才退出:
1
2
3
4
5
6
7
#!/bin/bash
#
while [ "$A" != 'Q' -a "$A" != 'q' ]; do
    echo "Input:$A"
    echo            //  此行显示为空格
  read -p "Please input something: " A
done




  例子:求100内所有整数之和:
1
2
3
4
5
6
7
8
9
#!/bin/bash
#
declare -i SUM=0
declare -i A=1
while [ $A -le 100 ]; do  
    SUM=$[$SUM+$A]  
    let A++   //  让A不断的循环自加,直到A的值小与等于100的时候停止
done
    echo "SUM is $SUM"



㈡而与while相反就是until,它的意思就是,当条件不成立时,就进行循环
    until  [条件判断] do
      当条件不成立时,就不断的循环的程序
    done
   for..in..do..done的用法
     例子显示每一位用户的默认shell:
1
2
3
4
5
#!/bin/bash
#
for I in `cut -d: -f1 /etc/passwd`; do
    echo "$I:`grep "^$I\>:" /etc/passwd | cut -d: -f7`"
done







函数的应用
  写一个脚本:
  1、提示用户输入一个用户名;
  2、使用函数实现:
   判断一个用户是否存在,用户名通过参数传递而来;
   如果存在,就显示此用户的shell和UID
   如果不存在,就说此用户不存在;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
#
name() {
if id $1 &> /dev/null; then
    echo `id -u $1`, shell: `grep "^$1\>:" /etc/passwd | cut -d: -f7`
    return 0
else
    echo "NO such this user."
    return 1
fi
}
read -p "Input a user" USER  
until [ "$USER" = "q" -o "$USER" = "Q" ]; do
   name $USER
   read -p "New User: " USER
done



⑴条件测试:用[]将测试的条件括住,如:[2 + 3]
   整数的比较为双目操作,也就是多个整数比较:NUM1操作符NUM2
     -eq  等于   #test 2 -eq 3  
     -ne  不等于
-gt  大于
     -lt  小于
-ge  大于等于
-le  小于等于
⑵算术运算符
     +  加   -  减 *  乘   /   %  余数   ^  指数
例子:2+3等于5的多种表示方法
       1、#sum=$[2+3]
          #echo $sum
       2、#sum=$((2+3))
          #echo $sum
       3、#let sum=2+3
          #echo $sum
  4、#expr 2 + 3  ----> 中间必须得有空格
例子:5除以3的余数是否为0
   #[ $[5%3] -eq 0 ]   ----> 括符两边有空格


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-21210-1-1.html 上篇帖子: 监控开发之用python扩展dstat插件自定义实时监控 下篇帖子: 使用for循环创建在指定目录下批量创建文件并重命名所有...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表