zoukankan      html  css  js  c++  java
  • shell流程控制&函数

    条件

    if-then-elif-then-fi

    if的条件部分经常使用test EXPRESSION[ EXPRESSION ]实现,test的用法可以参见test

    if 条件1        #if 条件1;then  
    then   
    	执行语句1
    elif 条件2      #elif 条件2;then
    then    
    	执行语句2  
    else
    	执行语句3
    fi    #条件结束标识,即将if反过来
    

    举个栗子

    #!/bin/sh
    var="a test string"
    if [ '$var' = 'a test string' ];then    #重要的事情:1.[  ]里的表达式两边各有一个空格,=两边也各有一个空格。2. 字符串比较可以使用=或==
    	echo 'We find $var'
    else
    	echo 'We do not know the value of $var'
    fi
    

    输出结果:

    $ ./shell_if.sh 
    We find $var
    

    选择

    case-esac

    case适合处理多个分支的情况

    case $var in
    	模式1)
    		执行语句1
    		;;
    	模式2)
    		执行语句2
    		;;
    	*)                 #其他情况
    		执行语句3
    esac #就是case反过来
    

    举个栗子:

    #!/bin/sh
    var=4
    case $var in
    	[a-z]|[A-Z])                       #表示a-z或A-Z
    		echo "This is a letter"
    		;;
    	[0-9])
    		echo "This a number"
    		;;
        1[0-9])                                #表示10到19的数字,不能写[10-19]
            echo "This is a number between 10 and 19"
            ;;
    	*)
    		echo "This is neither a letter nor a number"
            ;;
    esac
    

    执行结果:

    $ ./Shell_case.sh
    This a number
    

    循环

    while-do-done

    条件满足就执行循环体

    while 条件
    do
    	循环体
    done  
    

    until-do-done

    不断执行循环体直到条件得到满足

    until 条件
    do
    	循环体
            continue
            break
    done
    

    for-do-done

    每次循环var都取一个cand的值并执行循环体,循环的执行次数取决于单词表的个数,for会隐含的对变量进行逐个单词的赋值,所以不是用的$var,而是var

    for var in cand1 cand2 cand3...
    do
    	循环体
            continue
            break
    done
    

    shell script也接受类C的for循环写法

    for ((i=0;i<6;i++)){
    	循环体
            continue
            break
    }
    

    函数

    和其他语言一样,shell脚本的函数也是对功能代码块的封装

    定义

    ATTENTION:shell函数的定义中的()只是表示这是一个函数的定义,里面不放任何参数

    #定义一个函数
    fcn_name (){
    	...
            echo $1
            return $A
    }
    

    调用

    使用函数的时候只要直接使用函数名即可

    #无参数
    fcn
    
    #有参数
    fcn para1 para2
    
    #有返回值
    fcn para1 para2
    ret=$?
    
  • 相关阅读:
    Linux 切换用户
    Java之.jdk安装-Linux
    Java之.jdk安装-Windows
    java注解生成xml和包含CDATA问题
    Spring学习—生成图片验证码
    java学习——java按值传递和按址传递
    温水中被煮熟的程序员-人生的思考
    mysql操作sql的小技巧
    java的classLoader分析与jettty的WebAppClassLoader
    深入Spring:自定义事务管理
  • 原文地址:https://www.cnblogs.com/xiaojiang1025/p/5962424.html
Copyright © 2011-2022 走看看