• 【Linux】Shell脚本编程(三)


      1 流程控制:
      2        循环语句:for,while,until
      3 
      4        while循环:
      5 
      6            while CONDITION; do
      7                循环体
      8             done
      9 
     10             进入条件:当CONDITION为“真”;
     11             退出条件:当CONDITION为“假”;
     12 
     13             while CONDITION; do
     14                 循环体
     15                 控制变量的修正表达式
     16             done
     17 
     18             示例:求100以内所有正整数之和;
     19                         #!/bin/bash
     20                         #
     21                         declare -i sum=0
     22                         declare -i i=1
     23 
     24                         while [ $i -le 100 ]; do
     25                               let sum+=$i
     26                               let i++
     27                         done
     28 
     29                         echo "Sum: $sum."
     30 
     31         练习:分别求100以内所有奇数之和,及所有偶数之和;
     32 
     33         示例:打印九九乘法表;
     34                   #!/bin/bash
     35                   #
     36                   declare -i i=1
     37                   declare -i j=1
     38 
     39                   while [ $j -le 9 ]; do
     40                        while [ $i -le $j ]; do
     41                             echo -e -n "${i}X${j}=$[$i*$j]	"
     42                             let i++
     43                        done
     44                        echo
     45                        let i=1
     46                        let j++
     47                   done
     48 
     49         until循环:
     50              until CONDITION; do
     51                    循环体
     52                    循环控制变量的修正表达式
     53               done
     54 
     55               进入条件:当CONDITION为“假”时
     56               退出条件:当CONDITION为“真”时
     57 
     58               示例:求100以内正整数之和;
     59               #!/bin/bash
     60               #
     61               declare -i sum=0
     62               declare -i i=1
     63 
     64               until [ $i -gt 100 ]; do
     65                    let sum+=$i
     66                    let i++
     67               done
     68 
     69               echo "Sum:$sum."
     70         练习1:分别求100以内所有偶数之和,以及所有奇数之和;
     71         练习2:实现九九乘法表;
     72         练习3:分别使用while和until循环实现添加10个用户:user-user10;
     73 
     74       循环控制:
     75            continue:提前结束本轮循环,而直接进入下一轮;
     76            break [n]:提前结束循环;
     77           
     78            while CONDTION;do
     79               .......
     80                if CONDITION; then
     81                    break [n]
     82                fi
     83            done
     84 
     85            while CONDTION;do
     86               .......
     87                if CONDTION2; then
     88                    continue [n]
     89                fi
     90                .......
     91 
     92                示例:求100以内所有偶数之和;
     93                 #!/bin/bash
     94                 #
     95                 declare -i sum=0
     96                 declare -i i=0
     97 
     98                 while [ $i -le 100 ]; do
     99                      let i++
    100                      if [ $[$i%2] -eq 1 ]; then
    101                          echo "$i is a odd."
    102                          continue
    103                      fi
    104                      let sum+=$i
    105                 done
    106 
    107                 echo "Sum:$sum."
    108 
    109           死循环:
    110               while true; do
    111                    循环体
    112                    if CONDITION; then
    113                       break
    114                    fi
    115                 done
    116 
    117                 until false; do
    118                    循环体
    119                    if CONDITION; then
    120                       break
    121                    fi
    122                 done
    123 
    124             示例;每隔3秒钟查看当前系统是否有名为'gentoo'的用户登录;
    125                如果其次查看gentoo登录了,则显示gentoo已经登录;
    126                如果未登录,就显示仍然未开始,并显示这是已经是第多少次查看了;
    127 
    128                 #!/bin/bash
    129                 #
    130                 username=$1
    131                 declare -i count=0
    132 
    133                 while true; do
    134                    if  who | grep "^$username" &> /dev/null; then
    135                          echo "$username is logged."
    136                          break
    137                    else
    138                        let count++
    139                        echo "$count $username is not login."
    140                    fi
    141                    sleep 3
    142                 done
    143 
    144             示例:2
    145 
    146                 #!/bin/bash
    147                 #
    148                 declare -i count=0
    149                 username=$1
    150 
    151                 if [ $# -lt 1 ]; then
    152                     echo "At lease one argument."
    153                     exit 1
    154                 fi
    155 
    156                 if ! id $username &> /dev/null; then
    157                     echo "No such user."
    158                     exit 2
    159                 fi
    160 
    161                 until who | grep "^$username" &> /dev/null; do
    162                     let count++
    163                     echo "$count $username is not login."
    164                     sleep 3
    165                 done
    166                 echo "$username is logged on."
    167 
    168 
    169         while循环的特殊用法:
    170             遍历文件的每一行:
    171                 while read VARIABLE; do
    172                     循环体
    173                 done < /PATH/FROM/SOME_FILE
    174 
    175             示例:找出UID为偶数的所有用户显示其用户名和ID号;
    176             #!/bin/bash
    177             #
    178             while read line; do
    179                 userid=$(echo $line | cut -d: -f3)
    180                 if [ $[$userid%2] -eq 0 ]; then
    181                   echo $line | cut -d: -f1,3
    182                 fi
    183             done < /etc/passwd
    184 
    185 
    186         for循环的特殊用法:
    187            for((expr1;expr2;expr3)); do
    188                循环体
    189            done
    190 
    191            expr1:定义控制变量,并初始赋值;
    192            expr2:循环控制条件;
    193                 进入条件:控制条件为“真”
    194                 退出条件:控制条件为“假”
    195 
    196            expr3:修正控制变量
    197 
    198             示例:求100以内所有正整数之和;
    199 
    200       练习1:打印九九乘法表:
    201       练习2:传递一个文本文件为参数给脚本,取出此文件的所有的偶数行给予显示,行前要显示行号;
    202 
    203     函数:
    204        function:功能
    205           把一段具有独立功能代码封装在一起,并给予命名;后续用到时,可直接通过给定函数名来调用整体代码;
    206 
    207           函数作用:
    208               代码重用:
    209               模块化编程:
    210 
    211         函数的使用方法:
    212             先定义:编写函数代码
    213             后调用:给出函数名,还可以按需传递参数;
    214 
    215         定义方法:
    216         (1)function f_name {
    217                  函数体
    218              }
    219          (2)f_name() {
    220                  函数体
    221              }
    222 
    223         调用函数:
    224             f_name [argu1,argu2,...]
    225 
    226         自定义函数状态返回值:
    227              return [#]
    228                   0:成功
    229                   1-255:失败
    230                   注意:函数代码执行时,一旦遇到return,函数代码终止运行,函数返回;
    231         示例:此前的服务脚本
    232 
    233         #!/bin/bash
    234         #
    235         prog=$(basename $0)
    236         lockfile="/var/lock/subsys/$prog"
    237         #echo $lockfile
    238 
    239         if [ $# -lt 1 ]; then
    240            echo "Usage: $prog start|stop|restart|status"
    241            exit 1
    242         fi
    243 
    244         start() {
    245             if [ -f $lockfile ]; then
    246                 echo "$prog is started yes."
    247             else
    248                touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.."
    249             fi
    250         }
    251         stop() {
    252             if [ -f $lockfile ]; then
    253                 rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.."
    254             else
    255                 echo "$prog is stopped yet."
    256             fi
    257         }
    258         restart() {
    259             if [ -f $lockfile ]; then
    260                 rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..."
    261             else
    262                 touch $lockfile && echo "$prog is stopped, Starting $prog ok..."
    263             fi
    264         }
    265         status() {
    266             if [ -f $lockfile ]; then
    267                 echo "Running..."
    268             else
    269                 echo "Stopped..."
    270             fi
    271         }
    272 
    273         case $1 in
    274         start)
    275              start
    276              ;;
    277         stop)
    278             stop
    279              ;;
    280         restart)
    281              restart
    282              ;;
    283         status)
    284              status
    285              ;;
    286 
    287         *)
    288             echo "Usage: $prog start|stop|restart|status"
    289             exit 1
    290         esac
    291     示例:判断用户ID号的奇偶性
    292 
    293     #!/bin/bash
    294     #
    295     evenid() {
    296        if [ $# -lt 1 ]; then
    297            return 1
    298        fi
    299        
    300        if ! id $1 &> /dev/null; then
    301            return 2
    302        fi
    303       
    304        userid=$(id -u $1)
    305        if [ $[$userid%2] -eq 0 ]; then
    306           echo "$1,Even user ID."
    307        else
    308           echo "$1,Odd user ID."
    309        fi
    310     }
    311 
    312     evenid root
    313 
    314     evenid
    315     echo $?
    316 
    317     evenid rooooooot
    318     echo $?
    319 
    320    模块化编程
    321        示例:
    322           架设/root/bin/srv目录有两个文件:
    323            (1)函数文件
    324            (2)脚本文件
    325 
    326     为脚本使用配置文件
    327         一个文件中只定义变量
    328         脚本文件source此变量定义的文件
    329 
    330     变量的作用域:
    331          局部变量:
    332             local VARIABLE=value
    333 
    334          存活时间:
    335             函数执行开始,至函数返回结束;
    View Code
  • 相关阅读:
    Http请求头与响应头
    获取ip位置方法
    简单的Http Server实现
    HTTP
    long、int与byte数组之间的相互转换
    GlusterFS简单配置
    创建线程池
    网络编程socket
    面向对象-进阶篇
    面向对象-初级篇
  • 原文地址:https://www.cnblogs.com/chaoyazhisi/p/5231338.html
Copyright © 2020-2023  润新知