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

第 三 十 一 天:shell 脚本 (三)

[复制链接]

尚未签到

发表于 2018-8-28 13:38:31 | 显示全部楼层 |阅读模式
  小Q :你可以从别人那里得到思想,你的思想方法,即熔铸思想的模子必须是
  你自己的。                                   ----拉姆
  就像我以前说的,因为有c等编程语言作基础,学起shell来感觉会很轻松,我都不知道要
  怎么记笔记了,感觉还是那些知识,记得太详细的话,知识点太多,不过太零散,就大致
  记了一下;
  就像我们老师说的:关于编程,我不要求你什么语句都懂,我给你要求,你只要给我画出他
  的流程图就行。是啊,其实编程为什么注重多看多写,就是要你遇到问题可以在你脑中搜
  索你以前的模板,别的格式什么的都好说。
  一:逻辑判断if/case
  二:循环语句while/for
  三:控制循环语句的指令
  四:函数
  五:数组
  =========================================================================
  一:逻辑判断if/case
if的三种结构:  
1.if  【表达式】         2.if   【表达式】     3.if  【表达式】
  
  then                     then                  then
  
       command                   command              command
  
  fi                       else                  elif【表达式】
  
                                 command         then
  
                           fi                         command
  
                                                 elif
  
                                                    ····
  
                                                 else
  
                                                       command
  
                                                 fi
  表达式:
  【 -s file  】    如果文件存在且非空
  【 -f/d  名字 】    如果文件/目录存在
  【 -r/w/x  file  】    如果文件存在且可读/可写/可执行
  【 $string1 !=  $string2 】   如果string1不等于string2
  【 -n $string  】             如果string 非空(非0),返回0(true)
  【 -z $string  】             如果string 为空
  【 int1 -eq int2 】    如果int1等于int2     (不允许用=号)
  -gt 大于  -lt 小于  -ne 不等于  -le 小于等于  -ge 大于等于
  组合:
  如果存在/tmp/目录并且(或者)当前目录下存在1.txt文件,则为真,输出0
  【-d /tmp/】&&【-f 1.txt】  ==  【-d /tmp/-d /tmp/ -a  -f 1.txt】
  【-d /tmp/】||【-f 1.txt】  ==  【-d /tmp/-d /tmp/ -o  -f 1.txt】
  
  举例:
#!/bin/bash  
##成绩脚本,90-100为优秀,70-80为一般,其他不及格
  
##name and  time
  
read -p "请输入你的成绩" chengji
  
if [ $chengji -ge 90 ] && [ $chengji -le 100 ]
  
then
  
  echo "你的成绩很优秀"
  
elif [ $chengji -ge 70 ] && [ $chengji -lt 90 ]
  
then
  
   echo "你的成绩一般"
  
else
  
   echo"你的成绩不级合格"
  
fi
  当有多个判断条件时,使用if显得太繁琐了,而使用和他功能类似的case,就显得简单清晰多了;
#格式:  
变量=赋值
  
case $变量名  in               in:在那个模式下
  
     条件1)                   判断条件
  
            command1
  
      ;;                        ;; :结束符
  
     条件2)
  
            command2
  
      ;;
  
         *)                    * :除了模式12的其他所有模式
  
           默认执行的命令序列
  
      ;;
  
esac                           case结束标志
  #举例:
#!/bin/sh  
## 判断使用的那种系统
  
## name and  time
  
SYSTEM=`uname -s`
  
case $SYSTEM in
  
     Linux)
  
         echo "My system is Linux"
  
         echo "Do Linux stuff here..."
  
     ;;
  
     FreeBSD)
  
         echo "My system is FreeBSD"
  
         echo "Do FreeBSD stuff here..."
  
     ;;
  
     *)
  
         echo "Unknown system : $SYSTEM"
  
         echo "I don't what to do..."
  
     ;;
  
esac
  ===========================================================================================
  二:循环语句while/for
while一般用得比较少,常用死循环写监控脚本,格式如下:  
#!/bin/bash                   #!/bin/bash
  
##备注说明                     ##count sum from 0-100
  
                               i=0 ;sum=0
  
while  [表达式]                while  [ i -le 100 ]
  
do                             do
  
   command                         sum=$[$sum+$i]
  
   .......                         echo  $sum
  
done                               i=$[$i+1]
  
                               done
  应用举例:http://lovelace.blog.51cto.com/1028430/1211927
  $ seq 1000       起始默认是 1,间隔默认也是1
  $ seq 2 1000     间隔默认是1
  $ seq 1 3 10     从1到10,间隔为3,结果是:1 4 7 10
#格式  
#!/bin/bash                #命令行下的for语句
  
##remarks                  #工作中分发的脚本,IP为对象单位
  

  
for .. in 条件
  
do
  
   command
  
   .......
  
done
  举例应用:
#法一                               #法二  
#!/bin/bash                         #!/bin/bash
  
for i in `seq 1 1000000`            for((i=1;i   4   去掉local:4
  
funcation可不加     local表示不允许模块外使用函数                           4
  七种用法:http://www.iyunv.net/article/57951.htm
  扩展一下:http://blog.chinaunix.net/uid-1924596-id-3048863.htm  l
  ==========================================================================================
  五:数组
  数组赋值:
  (1) array=(var1 var2 var3 ... varN)
  (2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)
  (3) array[0]=var1
  ...
  array[n]=varN
  赋值 a=(0 1 2 3 4)
  输出 echo ${a
  • }    >>>   0 1 2 3 4   把*换成@也可以
      echo ${a[1]}    >>>   1           指定输出
      echo ${#a[@]}   >>>   5           输出元素个数
      更改 a[3]=8;echo ${a
  • }  >>>   0 1 2 8 4
      增加 a[5]=3;echo ${a[@]}  >>>   0 1 2 8 4 3
      删除数组 unset a;echo ${a
  • }       >>>   无输出
      删除元素 unset a[2];echo ${a[@]}    >>>   0 1 8 4 3
      当然我们也可以以字符串做数组;
    例题:  
    #!/bin/bash
      
    #读入n次字符串,每次输入的字符串保存在数组array里
      
    i=0
      
    n=5
      
    while [ "$i" -lt $n ] ; do
      
      echo "Please input strings ... `expr $i + 1`"
      
      read array[$i]
      
      b=${array[$i]}
      
      echo "$b"
      
      i=`expr $i + 1`
      
    done
      

      
    #!/bin/bash
      
    #将字符串里的字母逐个放入数组,并输出到“标准输出”
      
    chars='abcdefghijklmnopqrstuvwxyz'
      
    for (( i=0; i

  • 运维网声明 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.iyunv.com/thread-557801-1-1.html 上篇帖子: linux shell脚本调整任务计划 下篇帖子: shell中可能经常能看到:>/dev/null 2>&1
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

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

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

    扫描微信二维码查看详情

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


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


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


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



    合作伙伴: 青云cloud

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