• shell脚本(三)结构化命令


    if-then语句

    if-then语句相当于其他编程语言中的if语句,其他编程语言判断是true或者false,但是if-then语句会执行if后面的那条命令,如果命令的退出状态码是0(0表示执行成功),则位于then语句部门的命令就不会被执行,否则不会执行。

    #if-then语句格式 
    if [command] 
    then    
    	[commands] 
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    #例子 
    if pwd 
    then    
    	echo "pwd命令执行成功" 
    fi         
    
    • 1
    • 2
    • 3
    • 4
    • 5

    if-then-else语句

    if-then-else语相当于其他编程语言的if-else语句,如果if语句退出状态码不为0,则执行else命令。

    #if-then-else语句格式 
    if [command] 
    then    
    	[commands] 
    else    
    	[commands] 
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    #例子 
    if pwd 
    then    
    	echo "if后指令执行成功" 
    else    
    	echo "if后指令执行失败" 
    fi           
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    嵌套if

    当需要检查多种判断时,可以使嵌套if-then语句,也可以使用else的另一种形式:elif。

    #嵌套if-then 
    if [command] 
    then    
    	[commands] 
    else    
    	[commands]    
    	if [command]    
    	then        
    		[commands]    
    	fi 
    fi   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    #elif 
    if [command] 
    then    
    	[commands] 
    elif 
    	[command] 
    then    
    	[commands] 
    else    
    	[commands] 
    fi          
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    test命令

    shell脚本中,if等判断都是判断后面跟着的命令返回的状态码是否为0来确定是走then还是elif语块,并没有直接判断其他形式的条件。test命令提供了在if-then语句中测试不同条件的途径,如果条件不成立test命令会退出并返回不为0的状态码,if-then语句就不会被执行。

    test命令各市:test [condition]

    [condition]是test命令要测试的一系列参数和值。如果[condition]部分不写时,它会以非0的状态码退出(会执行else语句)。

    if test [condition] 
    then    
    	[commands] 
    fi
    
    • 1
    • 2
    • 3
    • 4

    test命令测试变量是否有内容

    #!/bin/bash 
    var1="zqq" 
    if test $var1 
    then    
    	echo "var1 is not empty ,var1=$var1" 
    else    
    	echo "var1 is empty" 
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    base shell提供了中括号[]测试条件的方法,无需在语句中生命test命令。注意第一个括号之后和第二个括号前需要加空格,否则会报错。

    if [ condition ] 
    then    
    	[commands] 
    fi
    
    • 1
    • 2
    • 3
    • 4

    复合条件测试

    # &&判断   
    [ condition1 ] && [ condtion2 ] 
    # ||s判断 
    [ condition1 ] || [ condition2 ]
    
    • 1
    • 2
    • 3
    • 4

    case命令

    如果有很多个条件如果用if-then去检查,则会写很多elif,用case命令就可以节省很多elif。格式如下。

    case [variable] in 
    	pattern1 | pattern2) [commands];; 
    	pattern3) [commands];; 
    	pattern4) [commands];; 
    	*) default [commands];; 
    esac
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    for命令

    for命令跟其他编程语言for效果一样,循环执行语句直到执行完最后一个。

    for var in list 
    do
    	[commands] 
    done
    
    • 1
    • 2
    • 3
    • 4

    循环数组

    #!/bin/bash 
    #定义数组 
    array=("a" "b" "c" "d") 
    #for命令打印数组元素 
    for arr in ${array[*]} 
    do    
    	echo "数组元素为:$arr" 
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    从命令中取值

    #!/bin/shell 
    #从命令中取值 
    #创建文本/home/atext 
    for s in $(cat -n /home/atext) 
    do    
    	echo "文本的值为:$s" 
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    通配符读取目录

    #!/bin/bash 
    #通配符读取目录 
    for file in /home/file/* 
    do    
    	echo "file path:$file" 
    done    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    c语言风格的for循环

    #!/bin/bash 
    #循环输入1-10 
    for((i=1; i <=10 ;i++)) 
    do    
    	echo "i val is :$i" 
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    #!/bin/bash 
    #迭代多个变量,i,j 
    for((i=1,j=10; i<=10 ;i++,j--)) 
    do    
    	echo "i=$1,j=$j" 
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    while命令

    while命令某种意义上相当于if-then命令和for命令的混杂题。while命令允许定义一个测试命令,然后执行一组命令,如果测试命令退出状态码是0(执行成功)就会一直执行循环体内命令。

    while test [command] 
    do   
    	[commands] 
    done
    
    • 1
    • 2
    • 3
    • 4
    #!/bin/bash 
    var1=10 
    while [ $var1 -gt 0 ] 
    do    
    	echo $var1    
    	var1=$[ $var1 - 1 ] 
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    until命令

    until命令和while命令工作的方式完全相反。until命令要求知道一个通常返回非0的退出状态码命令。只有测试命令的退出状态码不为0(执行失败),才会执行循环中列出的命令。

    until test [command] 
    do    
    	[commands]    
    done 
    
    • 1
    • 2
    • 3
    • 4

    控制循环

    有两个命令可以控制循环的情况

    1. break命令
    2. continue命令

    break命令

    break命令可以跳出任意循环,包括嵌套的循环,默认情况下break只会跳出当前循环,无法跳出父循环及更上层循环。break命令可以接收参数来指定跳出几层循环,默认为1。

    命令格式:break [n]

    [n]为跳出的层数,默认为1。

    #!/bin/bash 
    #使用break跳出循环 
    for var1 in 1 2 3 4 5 6 7 8 9 
    do    
    	if [ $var1 -eq 5 ]    
    	then        
    		break;    
    	fi    
    	echo "var1=$var1"     
    done 
    #使用break跳出多层循环 
    for((i=1; i<=10 ;i++)) 
    do    
    	for((j=1; j<=10 ;j++))    
    	do        
    		if[ $j -eq 5 ]        
    		then            
    			break 2;        
    		fi    
    	done 
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    continue命令

    continue命令可以提前中止某次循环,但不会完全终止整个循环,会进入到下一次循环。

    #!/bin/bash 
    for((i=0; i<=10 ;i++)) 
    do    
    	if[ $i -eq 5 ]    
    	then        
    		continue;    
    	fi 
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    处理循环输出

    循环内有很多echo的输出,有时候不想直接打在屏幕上,希望向日志一样打到文件里。这是后可以用输出重定向符号(>>)添加到循环结束done关键字后。

    #!/bin/bash 
    for ((i=1; i<=10; i++)) 
    do    
    	echo "输出结果:i=$i" 
    done >> /home/test.log
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Jackson 解析 JSON 详细教程
    【Java 进阶篇】Java Servlet 执行原理详解
    1200*B. BerSU Ball(贪心)
    基于velero及minio实现etcd数据备份与恢复
    低空经济持续发热,无人机培训考证就业市场及前景剖析
    前端基础之《Bootstrap(12)—JavaScript插件_滚动监听、侧边栏浮动》
    vue2中,下拉框多选和全选的实现
    【Rust 指南】并发编程|无畏并发的原因
    延期公告 | 第五届“强网”拟态防御国际精英挑战赛
    用 JavaScript 编写枚举的最有效方法
  • 原文地址:https://blog.csdn.net/zhaoqingquanajax/article/details/126653017