zoukankan      html  css  js  c++  java
  • 一篇文章让你入门Shell !

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。

    Shell可以直接使用在win/Unix/Linux上面,并且可以调用大量系统内部的功能来解释执行程序,如果熟练掌握Shell脚本,可以让我们操作计算机变得更加轻松,也会节省很多时间。

    Shell应用场景

    Shell能做什么

    • 将一些复杂的命令简单化(平时我们提交一次github代码可能需要很多步骤,但是可以用Shell简化成一步)

    • 可以写一些脚本自动实现一个工程中自动更换最新的sdk(库)

    • 自动打包、编译、发布等功能

    • 清理磁盘中空文件夹

    • 总之一切有规律的活脚本都可以尝试一下

    Shell不能做什么

    • 需要精密的运算的时候

    • 需要语言效率很高的时候

    • 需要一些网络操作的时候

    • 总之Shell就是可以快速开发一个脚本简化开发流程,并不可以用来替代高级语言

    Shell的工作原理

    Shell可以被称作是脚本语言,因为他本身是不需要编译的,而是通过解释器解释之后在编译执行,和传统的语言相比多了解释的过程,所以效率会略低于传统的直接编译的语言。

    如何运行Shell脚本

    最简单的脚本

    #!/bin/bash
    echo"Hello World"
    

    只需要打开文本编辑工具,编辑成以上的样子,然后保存成test.sh

    运行该脚本

    1. cd到该目录下

    2. chmod +x ./test.sh #给脚本权限

    3. ./test.sh #执行脚本

    这样我们便写出来了第一个最简单的脚本,下面我们可以尝试着写一些复杂的脚本。

    变量

    Shell中的变量

    myText= "hello world"
    muNum= 100
    

    这里需要注意的是,"=" 前后不能有空格,命名规则就和其他语言一样了。

    访问变量

    myText= "hello world"
    muNum=100
    echo $myText
    echo muNum
    

    当你访问变量的时候,需要使用$,否则输出的将是纯文本内容,如下图所示:

    符号和运算

    Shell中的四则运算

    运算符 含义 + 加法运算 - 减法运算 * 乘法运算 / 除法运算

    例子程序
    #!/bin/bash
    echo"Hello World !"
    a=3
    b=5
    val=`expr $a+ $b`
    echo"Total value : $val"
    val=`expr $a- $b`
    echo"Total value : $val"
    val=`expr $a* $b`
    echo"Total value : $val"
    val=`expr $a/ $b`
    echo"Total value : $val"
    

    这里面需要注意的就是,定义变量的时候"="前后是不能有空格的,但是进行四则运算的时候,运算符号前后一定要有空格,乘法的时候需要进行转义。

    其它运算符 =、==、!=、!、-o、-a

    运算符 含义
    % 求余
    == 相等
    = 赋值
    != 不相等
    !
    -o
    -a
    例子程序
    a=3
    b=5
    val=`expr $a/ $b`
    echo"Total value : $val"
    val=`expr $a% $b`
    echo"Total value : $val"
    if[ $a== $b]
    then
    echo"a is equal to b"
    fi
    if[ $a!= $b]
    then
    echo"a is not equal to b"
    fi
    

    关系运算符
    运算符 含义
    -eq 两个数相等返回true
    -ne 两个数不相等返回true
    -gt 左侧数大于右侧数返回true
    -It 左侧数小于右侧数返回true
    -ge 左侧数大于等于右侧数返回true
    -le 左侧数小于等于右侧数返回true
    例子程序
    #!/bin/sh
    a=10
    b=20
    if[ $a-eq $b]
    then
    echo"true"
    else
    echo"false"
    fi
    if[ $a-ne $b]
    then
    echo"true"
    else
    echo"false"
    fi
    if[ $a-gt $b]
    then
    echo"true"
    else
    echo"false"
    fi
    if[ $a-lt $b]
    then
    echo"true"
    else
    echo"false"
    fi
    if[ $a-ge $b]
    then
    echo"true"
    else
    echo"false"
    fi
    if[ $a-le $b]
    then
    echo"true"
    else
    echo"false"
    fi
    

    字符串运算符

    运算符 含义
    = 两个字符串相等返回true
    != 两个字符串不相等返回true
    -z 字符串长度为0返回true
    -n 字符串长度不为0返回true
    运算符 含义
    -d file 检测文件是否是目录,如果是,则返回 true
    -r file 检测文件是否可读,如果是,则返回 true
    -w file 检测文件是否可写,如果是,则返回 true
    -x file 检测文件是否可执行,如果是,则返回 true
    -s file 检测文件是否为空(文件大小是否大于0,不为空返回 true
    -e file 检测文件(包括目录)是否存在,如果是,则返回 true

    数据类型

    字符串

    #!/bin/sh
    mtext= "hello"#定义字符串
    mtext2= "world"
    mtext3= $mtext" "$mtext2#字符串的拼接
    echo$mtext3#输出字符串
    echo${#mtext3}#输出字符串长度
    echo${mtext3:1:4}#截取字符串
    

    数组

    #!/bin/sh
    array=(1 2 3 4 5) #定义数组
    array2=(aa bb cc dd ee) #定义数组
    value= ${array[3]}#找到某一个下标的数,然后赋值
    echo$value#打印
    value2= ${array2[3]}#找到某一个下标的数,然后赋值
    echo$value2#打印
    length= ${#array[*]}#获取数组长度
    echo$length
    

    输出程序

    echo

    #!/bin/sh
    echo"hello world"
    echohello world
    text= "hello world"
    echo$text
    echo-e "hello world"#输出并且换行
    echo"hello world"> a.txt #重定向到文件
    echo`date` #输出当前系统时间
    

    printf

    printf 命令的语法:

    printf  format-string  [arguments...]
    

    参数说明:

    format-string: 为格式控制字符串

    arguments: 为参数列表。

    示例
    #!/bin/bash
    # format-string为双引号
    printf "%d %s
    " 1 "abc"
    # 单引号与双引号效果一样 
    printf '%d %s
    ' 1 "abc" 
    # 没有引号也可以输出
    printf %s abcdef
    # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
    printf %s abc def
    printf "%s
    " abc def
    printf "%s %s %s
    " a b c d e f g h i j
    # 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
    printf "%s and %d 
    " 
    

    判断语句

    if ,else,if else,case

    • if

    • if-else

    • if-elseIf

    • case

    示例
    #!/bin/sh
    a=10
    b=20
    if[ $a== $b]
    then
    echo"true"
    fi
    if[ $a== $b]
    then
    echo"true"
    else
    echo"false"
    fi
    if[ $a== $b]
    then
    echo"a is equal to b"
    elif[ $a-gt $b]
    then
    echo"a is greater than b"
    elif[ $a-lt $b]
    then
    echo"a is less than b"
    else
    echo"None of the condition met"
    fi
    

    test命令

    test$[num1] -eq $[num2] #判断两个变量是否相等

    testnum1=num2 #判断两个数字是否相等

    参数 含义
    -e file 文件存在则返回真
    -r file 文件存在并且可读则返回真
    -w file 文件存在并且可写则返回真
    -x file 文件存在并且可执行则返回真
    -s file 文件存在并且内容不为空则返回真
    -d file 文件目录存在则返回真

    循环

    for循环

    #!/bin/sh
    fori in{1..5}
    do
    echo$i
    done
    for i in5 6 7 8 9
    do
    echo$i
    done
    forFILE in$HOME/.bash*
    do
    echo$FILE
    done
    

    while循环

    #!/bin/sh
    COUNTER=0
    while[ $COUNTER-lt 5 ]
    do
    COUNTER=`expr $COUNTER+ 1`
    echo$COUNTER
    done
    echo'请输入。。。'
    echo'ctrl + d 即可停止该程序'
    whilereadFILM
    do
    echo"Yeah! great film the $FILM"
    done
    

    以上是while循环的两种用法,第一种是比较常规的,执行循环,然后每次都把控制的数加1,就可以让while循环有退出的条件了。第二种是用户从键盘数据,然后把用户输入的文字输出出来。

    跳出循环

    • break#跳出所有循环

    • breakn #跳出第n层f循环

    • continue#跳出当前循环

    函数

    #!/bin/sh
    sysout(){
    echo"hello world"
    }
    sysout
    

    定义一个没有返回值的函数,然后调用该函数

    #!/bin/sh
    test(){
    aNum=3
    anotherNum=5
    return$(( $aNum+ $anotherNum))
    }
    test
    result=$?
    echo$result
    

    定义一个有返回值的函数,调用该函数,输出结果

    #!/bin/sh
    test(){
    echo$1#接收第一个参数
    echo$2#接收第二个参数
    echo$3#接收第三个参数
    echo$##接收到参数的个数
    echo$* #接收到的所有参数
    }
    testaa bb cc
    

    定义了一个需要传递参数的函数

    重定向

    • $echo result > file #将结果写入文件,结果不会在控制台展示,而是在文件中,覆盖写

    • $echo result >> file #将结果写入文件,结果不会在控制台展示,而是在文件中,追加写

    • echo input < file #获取输入流

    写一个自动输入命令的脚本,自动提交github仓库的脚本

    #!/bin/bash
    echo"-------Begin-------"
    git add .
    git commit -m $1
    echo$1
    git push origin master
    echo"--------End--------"
    

  • 相关阅读:
    [北大机试C]:走迷宫(BFS)
    [北大机试B][OpenJ_Bailian-2965]:玛雅历(模拟)
    [北大机试A]:有趣的跳跃(模拟)
    [2019北大机试D]:最大上升子序列和(DP)[计蒜客-T1221/HDU1087]
    [牛客练习赛53] A.超越学姐爱字符串 [dp]
    [牛客][北大考研复试]I Wanna Go Home[dijkstra]
    SP1716 GSS3
    牛客小白月赛13_A_小A的签到题
    自习室管理系统,基于B/S模式下的JAVA系统
    基于SSH的聊天室
  • 原文地址:https://www.cnblogs.com/kimyeee/p/9915861.html
Copyright © 2011-2022 走看看