美文网首页
Shell脚本操作-2

Shell脚本操作-2

作者: 做个合格的大厂程序员 | 来源:发表于2020-06-01 18:25 被阅读0次

    Shell语言的echo命令

    我们都知道echo是打印输出的意思,那么echo可以怎么实现输入呢

    1. 显示普通的字符串,例如:echo "iPhoneX 标配8888"
    2. 显示转义字符,例如:echo "iPhone 顶配 10000"
    3. 显示变量,例如:iphone="iphoneX" echo "${iphone} 9888"
    4. 显示换行,必须要用-e来开启转义功能,例如:echo -e "iphoneX \n hello 未来"
    5. 不换行,不换行用\c表示,例如:echo -e iPhoneX hello未来 \c echo"科技"
    6. 显示一个执行命令,例如要求输入当前时间,用date
    7. 退出命令,exit 状态(详见下方的状态表),如果一旦执行了exit之后,后面的语句就不会继续执行了。
    8. 重定向

    关于状态码:

    状态码 描述
    0 命令执行成功
    1 一般性未知错误
    2 不适合的shell命令
    126 命令不可执行
    127 没有找到命令
    130 通过ctrl+c终止的命令
    255 正常范围内推出的状态码

    Shell语言的数组

    语法

    数组名=(值1 值2 值3...)

    初始化

    方式一:

    name=("404" "andy" "hello" "world")
    

    方式二:

    name=()
    name[1]="404"
    name[2]="Andy"
    name[3]="hello"
    name[4]="world"
    

    读取数组

    @或者*来输出所有的数组元素,但是@是将元素一个一个输出,*是将数组内元素组合成一个字符串输出。这点需要注意。

    echo ${name[*]}
    echo ${name[@]}
    

    数组长度

    之前说了在输出前面加#是输出字符串长度,这里同样适用于数组,在获取所有元素之后之后在数组前面加上#,如果是*的话,#同样适用,可以很智能的识别空格来进行对元素长度的识别解析。

    echo ${#name[@]}
    echo ${#name[*]}
    

    如果需要获取单个元素字符长度我们则可以用具体的下标

    echo ${#name[3]}
    

    Shell语言的传递参数

    语法定义:(终端输入)

    ./文件名称.sh 参数一 参数二 参数三

    获取参数:

    之前字符串章节说过用${1},${2}...表示,需要注意的是${0}表示文件名称

    echo ${1} ${2} ${3}
    

    特殊字符

    获取脚本输入参数个数

    echo ${#}
    

    获取参数列表

    echo ${*}
    

    Shell语言的基本运算符

    基本运算符

    基本运算符就是我们所称的+ - * / %

    a=1234
    b=3214
    c=`expr $a + $b`
    

    可以注意到,在shell语言中,单纯的元素相加不能直接用+,而是必须要用expr去计算两个变量的值。而且如果调用,后面的变量名称和+之间必须要加上空格来保证变量的独立性。否则则会当成字符串输出。

    注意:当且仅当用乘法的时候必须加上一个转义字符\

    a=1234
    b=3214
    c=`expr $a \* $b`
    

    赋值运算符

    =
    这个符号就很简单了,就不在做阐述了

    关系运算符

    一张表格阐述


    Xnip2020-03-09_10-27-14

    布尔运算符

    一张表格阐述


    Xnip2020-03-09_10-12-21

    逻辑运算符

    一张表格阐述


    Xnip2020-03-09_10-58-05

    字符串运算

    一张表格阐述


    Xnip2020-03-09_15-07-43

    文件测试运算符

    一张表格阐述


    Xnip2020-03-09_15-08-30

    循环控制语句

    if-else

    语法结构

    if [条件]
        then
            代码
    else if [条件]
        then
            代码
    else
            代码
    fi
    

    记住判断最后要以fi结尾

    例如我们来判定一个学生是不是男生:

    sex="man"
    
    if [ $sex = "man" ]
    then
        echo "男生"
    else
        echo "女生"
    fi
    

    for

    语法结构

    for 变量名 in item1 item2 item3 …
        do
            代码
        done
    

    比如我们要循环打印一个数组中的元素:

    names=("张三" "李四" "王五")
    for i in ${names[@]}
    do
        echo ${I}
    done
    

    while

    语法结构

    while(条件)
        do
            代码
        done
    

    假设我们要一直循环直到while条件不成立

    a=1
    while(($a<10))
    do
        echo ${a}
        a=`expr $a + 1`
    done
    

    case

    语法结构

    case 值 in
        模式1)
            代码
            ;;
        模式2)
            代码
            ;;
        模式3)
            代码
            ;;
        sac
    

    判断number的值

    number=1
    case $number in
    1) echo "等于1"
        ;;
    2) echo "等于2"
        ;;
    3) echo "等于3"
        ;;
    esac
    

    until

    until跟while循环相反,当条件判断为false的时候才进入循环执行,记住此时判断循环条件要打两个括号

    I=1
    until (($i > 1))
    do
        echo "i小于等于1"
    done
    

    跳出循环

    1) 跳出单个循环用break

    for ((i = 0;i < 10; i++))
    do
        echo "当前i的值为:${I}"
        if [ $i -eq 5 ] 
        then
            echo "退出循环"
            break
        fi
    done
    
    1. 直接跳出多层循环用break 层数,默认为1,例如退出2层
    for ((i = 0; i < 10; i++))
    do
        echo "打印所有i:${I}"
        for((j=0;j<10;j++))
        do
            echo "打印所有j:${j}"   
            if [ ${j} -eq 2 ]
            then
                echo "退出所有循环"
                break 2
            fi
        done
    done
    
    1. 结束当前循环continue
    for ((i = 0; i < 3; i++))
    do
        echo "打印所有i:${I}"
        for((j=0;j<3;j++))
        do
            if [ ${j} -eq 2 ]
            then
                continue
            else
                echo "打印当前j:${j}"
            fi
        done
    done
    
    打印
    打印所有i:0
    打印当前j:0
    打印当前j:1
    打印所有i:1
    打印当前j:0
    打印当前j:1
    打印所有i:2
    打印当前j:0
    打印当前j:1
    
    相当于跳过了j=2的所有打印
    

    相关文章

      网友评论

          本文标题:Shell脚本操作-2

          本文链接:https://www.haomeiwen.com/subject/dxwszhtx.html