加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

SHELL脚本编程进阶

发布时间:2020-12-15 23:21:09 所属栏目:安全 来源:网络整理
导读:shell 脚本编程进阶 流程控制 过程式编程语言 顺序执行 选着执行 循环执行 条件选择if语句 选择执行注意:if语句可嵌套单分支 if判断条;then 条件为真的分支代码 fi双分支: if判断条件;then 条件为真的分支的代码 else 条件为假的分支代码 fi if语句 多分
shell 脚本编程进阶

流程控制


过程式编程语言
    顺序执行
    选着执行
    循环执行

条件选择if语句


选择执行
注意:if语句可嵌套
单分支
    if判断条;then
        条件为真的分支代码
    fi
双分支:
    if判断条件;then
        条件为真的分支的代码 
    else
        条件为假的分支代码
    fi

if语句


多分支
     if 判断条件1; then
          条件1为真的分支代码
    elif 判断条件2; then
         条件2为真的分支代码
     elif 判断条件3; then
         条件3为真的分支代码
    else
        以上条件都为假的分支代码
    fi
逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句

if示例


根据命令的退出状态来执行命令
if ping -c1 -W2 station1 &> /dev/null; then
    echo ‘Station1 is UP‘
elif grep "station1" ~/maintenance.txt &> /dev/null; then
    echo ‘Station1 is undergoing maintenance‘
else
    echo ‘Station1 is unexpectedly DOWN!‘
    exit 1
fi

条件判断:case语句


case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;
esac

case支持glob风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
a|b: a或b

循环


循环执行
    将某代码段重复运行多次
    重复运行多少次
        循环次数事先已知
        循环次数事先未知
    有进入条件和退出条件
for,while,until

for循环


for 变量名 in 列表;do
     循环体
 done

 for i[i代表变量名] in {1..10};【in后面跟的是列表】do userdel -r user$i; done 【do和done中间的是循环体】

执行机制:
    依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直
    到列表中的元素耗尽,循环结束  

    例:[[email?protected]:11:44bin]#sum=0; for num in 1 23 4 6 4;do sum=$[sum+num]; done; echo sum=$sum
    sum=38
    [[email?protected]:12:58bin]#for num in 1 23 4 6 4;do echo "num=$num";done
    num=1
    num=23
    num=4
    num=6
    num=4
    [[email?protected]:13:24bin]#sum=0; for num in {1..100};do sum=$[sum+num]; done; echo sum=$sum
    sum=5050
    [[email?protected]:16:24bin]#sum=0; for num in `seq 10`;do sum=$[sum+num]; done; echo sum=$sum
    sum=55
    [[email?protected]:16:47bin]#sum=0; for num in {1..100..2};do sum=$[sum+num]; done; echo sum=$sum
    sum=2500

    例:算出1到100 和
    [[email?protected]:27:29bin]#sum=0; for i in {1..100};do sum=$[sum+i];done;echo sum=$sum
        sum=5050
    [[email?protected]:27:44bin]#sum=0; for i in `seq 1 2 100`;do sum=$[sum+i];done;echo sum=$sum
    sum=2500

for循环

列表生成方式:
(1) 直接给出列表
(2) 整数列表:
    (a) {start..end}
    (b) $(seq [start [step]] end)
(3) 返回列表的命令
    $(COMMAND)
(4) 使用glob,如:*.sh
(5) 变量引用;
   [email?protected],$*

while 循环


while CONDITION; do
        循环体
 done
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后
会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为
“false”终止循环
因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地

进入条件:CONDITION为true
退出条件:CONDITION为false

until循环


until CONDITION; do
        循环体
done

进入条件: CONDITION 为false
退出条件: CONDITION 为true

循环控制语句continue


用于循环体中
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为
第1层
 while CONDTIITON1; do
CMD1
...
if CONDITION2; then
continue
fi
CMDn
...
 done

循环控制语句break


用于循环体中
break [N]:提前结束第N层循环,最内层为第1层
 while CONDTIITON1; do
CMD1
...
if CONDITION2; then
break
fi
CMDn
...
 done

循环控制shift命令


shift [n]
用于将参量列表 list 左移指定次数,缺省为左移一次。
参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环遍
历位置参量列表时,常用到 shift
./doit.sh a b c d e f g h
./shfit.sh a b c d e f g h

示例:doit.sh


#!/bin/bash
# Name: doit.sh
# Purpose: shift through command line arguments
# Usage: doit.sh [args]
while [ $# -gt 0 ] # or (( $# > 0 ))
do
 echo $*
 shift
done

示例:shift.sh
#!/bin/bash
#step through all the positional parameters
until [ -z "$1" ]
do
 echo "$1"
 shift
done
echo

创建无限循环


while true; do
循环体
done

until false; do
循环体
Done

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读