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


      1 练习:求100以内所有偶数之和;
      2 使用至少三种方法实现;
      3 
      4 示例1:
      5 
      6 #!/bin/bash
      7 #
      8 declare -i sum=0        #声明一个变量求和,初始值为0
      9 
     10 for i in $(seq 0 2 100); do
     11     sum=$(($sum+$i))
     12 done
     13 
     14 echo "Even sum: $sum."
     15 
     16 示例2:
     17 
     18 #!/bin/bash
     19 #
     20 declare -i sum=0
     21 
     22 for i in {1..100}; do
     23     if [ $[$i%2] -eq 0 ]; then
     24        sum=$[$sum+$i]
     25     fi
     26 done
     27 
     28 echo "Even sum: $sum."
     29 
     30 增强型赋值:
     31   +=
     32     sum=$[$sum+$i]
     33     let sum+=$i
     34   -=,*=,/=,%=,
     35 
     36     let count=$[$conunt+1] -->let count+=1-->let count++
     37     let count=$[$conunt-1] -->let count-=1-->let count--
     38 
     39 
     40 示例:显示/etc目录下所有的每个普通文件,而后统计一共有多少个这样的文件;
     41 
     42 #!/bin/bash
     43 #
     44 declare -i count=0
     45 
     46 for file in /etc/*; do
     47     if [ -f $file ]; then
     48          let count++
     49          echo "$count $file"
     50     fi
     51 done
     52 
     53 echo "Total: $count files."
     54 
     55 
     56 测试表达式:
     57     整数测试;-gt,-lt,-ge,-le,-eq,-ne
     58     字符串测试:==,>,<,!=,-z,-n,=~
     59 
     60     注意:
     61     (1)字符串等会比较测试[ "$hostname" == 'localhost' ]
     62    (2)模式匹配测试:[[ "STRING" -~ PATTERN ]]
     63 
     64      示例:写一个脚本实现如下功能;
     65        获取当前主机的主机名:
     66            如果当前主机的主机名为空,或者为localhost,则将其修改为www.mageedu.com
     67 
     68     组合测试条件:
     69         条件间逻辑运算:
     70             与:多个条件要同时满足;
     71             或:多个条件满足其一即可;
     72             非:对指定的条件取反;
     73 
     74         表达式组合:
     75             与:[[ CONDITION -a CONDITION2 ]]
     76             或:[[ CONDITION -o CONDITION2 ]]
     77             非:[ !CONDITION ]
     78 
     79         命令组合:
     80             与:COMMAND1 && COMMAND2 <-- [ EXPR1 ] && [ EXPR2 ]
     81             或:COMMAND1 || COMMAND2
     82             非:!COMMAND
     83 
     84             false && true = false
     85             false && false = false
     86 
     87             true && false = true
     88             true && true = true
     89 
     90             if COMMAND; then
     91                COMMAND2
     92             fi
     93          短路操作符:
     94             true || true = true
     95             true || false = true
     96 
     97             false || true = true
     98             false || false = false
     99 
    100           if ! COMMAND1; then
    101               COMMAND2
    102           fi
    103 
    104           COMMAND1 && COMMAND2 || COMMAND3
    105               if COMMAND1;then
    106                    COMMAND2
    107               else
    108                    COMMAND3
    109               fi
    110 
    111     获取当前主机的主机名:
    112            如果当前主机的主机名为空,或者为localhost,则将其修改为www.mageedu.com
    113 
    114 #!/bin/bash
    115 #
    116 hostname=$(hostname)
    117 
    118 if [ -z "$hostname" -o "$hostname"=="localhost" ]; then
    119    hostname www.magedu.com
    120 fi
    121 
    122 练习:写一个脚本
    123 (1)传递两个文本文件路径给脚本;
    124 (2)显示两个文件中空白行数较多的文件及其空白行的个数;
    125 (3)显示两个文件中总行数较多的文件及其总行数;
    126 练习:写一个脚本
    127 (1)提示用户输入一个字符串;
    128 (2)判断:
    129      如果输入的是quit,则退出脚本;
    130      否则,则显示其输入的字符串内容;
    131 
    132  练习:写一个脚本,打印九九乘法表:
    133     循环嵌套
    134 
    135 #!/bin/bash
    136 #
    137 for j in {1..9}; do
    138    for i in $(seq 1 $j); do
    139       echo -n -e "${i}X${j}=$[$i*$j]	"
    140    done
    141    echo
    142 done
    143 
    144 多分支的if语句:
    145      单分支:
    146          if CONDITION; then
    147              if-true-分支
    148          fi
    149      双分支:
    150          if CONDITION; then
    151              if-true-分支
    152          else
    153              if-false-分支
    154          fi
    155 
    156     多分支:
    157          if CONDITION1; then
    158             if -CONDITION-true-分支
    159         elif CONDITION2; then
    160             if-CONDITION2-true-分支
    161         ...
    162         else
    163             if-ALL-false-分支
    164         fi
    165 
    166  示例:通过脚本参数传递一个文件路径给脚本,判断其类型:
    167 
    168  #!/bin/bash
    169 #
    170 if [ $# -lt 1 ]; then
    171    echo "Usage: $0 <path>"
    172    exit 1
    173 fi
    174 
    175 if [ -f $1 ]; then
    176    echo "Rgulat file."
    177 elif [ -d $1 ]; then
    178    echo "Directory."
    179 elif [ -h $1 ]; then
    180    echo "Symbolic link."
    181 elif [ -b $1 ]; then
    182    echo "Block special."
    183 elif [ -c $1 ]; then
    184    echo "Charactoer special."
    185 elif [ -S $1 ]; then
    186    echo "Socket file."
    187 else
    188    echo "file not exist or unknow type."
    189 fi
    190 
    191 示例:脚本可接受四个参数
    192    start:创建文件/var/lock/subsys/SCRIPT_NAME
    193    stop:删除此文件
    194    restatr:删除此文件并重新创建
    195    status:如果文件存在,显示为“running”;否则,显示为“stopped”
    196 
    197    basename命令:
    198       取得路径的基名:
    199 示例:
    200 
    201 #!/bin/bash
    202 #
    203 prog=$(basename $0)
    204 lockfile="/var/lock/subsys/$prog"
    205 #echo $lockfile
    206 
    207 if [ $# -lt 1 ]; then
    208    echo "Usage: $prog start|stop|restart|status"
    209    exit 1
    210 fi
    211 
    212 if [ "$1" == "start" ]; then
    213     if [ -f $lockfile ]; then
    214         echo "$prog is started yes."
    215     else
    216        touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.."
    217     fi
    218 elif [ "$1" == "stop" ]; then
    219     if [ -f $lockfile ]; then
    220         rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.."
    221     else
    222         echo "$prog is stopped yet."
    223     fi
    224 elif [ "$1" == "restart" ]; then
    225     if [ -f $lockfile ]; then
    226         rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..."
    227     else
    228         touch $lockfile && echo "$prog is stopped, Starting $prog ok..."
    229     fi
    230 elif [ "$1" == "status" ]; then
    231     if [ -f $lockfile ]; then
    232         echo "Running..."
    233     else
    234         echo "Stopped..."
    235     fi
    236 else
    237     echo "Usage: $prog start|stop|restart|status"
    238     exit 1
    239 fi
    240 
    241 case语句:
    242     简洁版多分支if语句:
    243     使用场景:判断某变量的值是否为多种情形中的一种时使用;
    244 
    245     语法:
    246         case $VARIABLE in
    247         PATTERN1)
    248              分支1
    249              ;;
    250         PATTERN2)
    251              分支2
    252              ;;
    253         PATTERN3
    254              分支3
    255              ;;
    256         ...
    257         *)
    258              分支n
    259              ;;
    260         esac
    261 
    262         PATTERN可使用glob模式的通配符:
    263            *:任意长度的任意字符;
    264            ?:任意单个字符;
    265            []:指定范围内的任意单个字符;
    266            a|b:多选1;
    267 
    268 示例:提示键入任意一个字符,判断类型:
    269 脚本如下:
    270 #!/bin/bash
    271 #
    272 read -p "Plz enter a character: " char
    273 
    274 case $char in
    275 [a-z])
    276      echo "A character."
    277      ;;
    278 [0-9])
    279      echo "A digit."
    280      ;;
    281 *)
    282      echo "A special character."
    283      ;;
    284 esac
    285 
    286 示例:脚本可接受四个参数
    287    start:创建文件/var/lock/subsys/SCRIPT_NAME
    288    stop:删除此文件
    289    restatr:删除此文件并重新创建
    290    status:如果文件存在,显示为“running”;否则,显示为“stopped”
    291 
    292    脚本如下:
    293 
    294    #!/bin/bash
    295 #
    296 prog=$(basename $0)
    297 lockfile="/var/lock/subsys/$prog"
    298 #echo $lockfile
    299 
    300 if [ $# -lt 1 ]; then
    301    echo "Usage: $prog start|stop|restart|status"
    302    exit 1
    303 fi
    304 case $1 in
    305 start)
    306     if [ -f $lockfile ]; then
    307         echo "$prog is started yes."
    308     else
    309        touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.."
    310     fi
    311     ;;
    312 stop)
    313     if [ -f $lockfile ]; then
    314         rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.."
    315     else
    316         echo "$prog is stopped yet."
    317     fi
    318     ;;
    319 restart)
    320     if [ -f $lockfile ]; then
    321         rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..."
    322     else
    323         touch $lockfile && echo "$prog is stopped, Starting $prog ok..."
    324     fi
    325     ;;
    326 status)
    327     if [ -f $lockfile ]; then
    328         echo "Running..."
    329     else
    330         echo "Stopped..."
    331     fi
    332     ;;
    333 *)
    334     echo "Usage: $prog start|stop|restart|status"
    335     exit 1
    336 esac
    View Code
  • 相关阅读:
    校园商铺-2项目设计和框架搭建-8升级mysql驱动相关的配置以支持mysql8
    校园商铺-2项目设计和框架搭建-7验证Dao
    校园商铺-2项目设计和框架搭建-6逐层完成SSM的各项配置
    校园商铺-2项目设计和框架搭建-5配置maven
    校园商铺-2项目设计和框架搭建-2实体类设计与表创建
    1移动测试流程和技术体系
    校园商铺-2项目设计和框架搭建-1系统功能模块划分
    校园商铺-1开发准备-3 Eclipse与maven的联合配置
    校园商铺-1开发准备-2开发准备
    校园商铺-1开发准备-1课程序章
  • 原文地址:https://www.cnblogs.com/chaoyazhisi/p/5231329.html
Copyright © 2020-2023  润新知