Shell脚本官方说明

Shell通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出,简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。

Shell 编程注意事项

Shell脚本名称命名一般为英文、大写、小写,后缀以.sh 结尾。
Shell脚本变量不能以数字、特殊符号开头,不能使用特殊符号,可以用 _ 下划线,不能使用关键字。

第一个脚本程序

如果对输入过程不太了解,就直接复制粘贴。

cd /
echo "echo HelloWorld">test.sh
chmod 777 test.sh
./test.sh

效果如下:
20230506141031.png

识别内嵌shell命令

通过type可以查看咱们平时使用的命令是否是【shell】内嵌命令,如果是代表执行效率就高。

type cd
type echo
type ps
type ll
type crond

效果如下:
20230506141254.png

运行【.sh】的三种方法

Shell脚本的第一行要写 #!/bin/sh,它指明了脚本中命令的解释器,否则在直接运行脚本时,将不能识别内嵌命令。

#!/bin/sh
echo "HelloWrold."
  1. ./
    在执行脚本时一定要写成 ./test.sh,而不是 test.sh,运行其他二进制的程序也一样,直接写 test.sh,Linux 系统会去PATH 里寻找有没有叫 test.sh 的,PATH 里只有 /bin/sbin/usr/bin/usr/sbin 等,当前目录通常不在 PATH 里,所以写成 test.sh 会找不到命令,要用 ./test.sh 告诉系统就在当前目录中找。
    20230506141815.png
  2. 作为解释器参数来运行shell脚本
    20230506141841.png
  3. 使用 source 命令执行
    20230506141955.png

Shell 基础语法

  1. 创建变量

    x=666
    y=777
    expr $x "+" $y

    效果如下:
    20230506142203.png

  2. 遍历多个值
    for循环差不多。【do】开始【done】结束

    for info in 王先生 龙姑娘 李少爷 张小姐
    do
    echo "欢迎 ${info} 光临"
    done

    效果如下:
    20230506142503.png
    花括号代表变量作用域,如果是连续字符建议使用,不是连续字符用不用都行

    for info in 王先生 龙姑娘 李少爷 张小姐
    do
    echo "欢迎 $info 光临"
    done

    效果如下:
    20230506142848.png

  3. 数组
    数组操作就一定要加上作用域{},使用方法与传统语法类似,下标都是从0开始。如果要输出整个数组,则使用echo ${array[@]}

    array=("王语嫣" "赵灵儿" "小龙女" "赵敏" "敏敏特穆尔")
    echo ${array[0]}
    echo ${array[1]}
    echo ${array[@]}

    效果如下:
    20230506143303.png

    3.1 获取数组长度

    echo ${#array[@]}

    如果加上描述,建议用上双引号,与显示信息不同,这里有一个#符号

    echo "数组长度:"${#array[@]}

    效果如下:
    20230506144214.png

    3.2 范围数组查询

    echo ${array[@]:2:4}

    效果如下:
    20230506144509.png

  4. 传递参数
    编辑测试脚本

    cd /root/
    vi test.sh

    输入下面内容:

    #!/bin/sh
    echo "Shell 在执行过程中传值:"
    echo " 执行人:$1"
    echo " 第 1 个参数为:$2"
    echo " 第 2 个参数为:$3"
    echo " 第 3 个参数为:$4"

    读取变量是从0开始,但是由于第一个命令要执行./脚本,故而从1进行获取
    20230506145313.png

  1. 运算符
运算符说明举例
!非运算,表达式为 true,则返回 false,否则返回 true[ ! false ] 返回 true
-o或运算,有一个表达式为 true,则返回 true[ $a -lt 20 -o $b -gt 100 ] 返回 true
-a与运算,两个表达式都为 true,才返回 true[ $a -lt 20 -a $b -gt 100 ] 返回 false
&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的 OR[ $a -lt 20 -a $b -gt 100 ] 返回 false
-eq检测两个数是否相等,相等返回 true[ $a -eq $b ] 返回 false
-ne检测两个数是否不相等,不相等返回 true[ $a -ne $b ] 返回 true
-gt检测左边的数是否大于右边的,如果是,则返回 true[ $a -gt $b ] 返回 false
-lt检测左边的数是否小于右边的,如果是,则返回 true[ $a -lt $b ] 返回 true
-ge检测左边的数是否大于等于右边的,如果是,则返回true[ $a -ge $b ] 返回 false
-le检测左边的数是否小于等于右边的,如果是,则返回true[ $a -le $b ] 返回 true
=检测两个字符串是否相等,相等返回 true[ $a = $b ] 返回 false
!=检测两个字符串是否相等,不相等返回 true[ $a != $b ] 返回 true
-z检测字符串长度是否为 0,为 0 返回 true[ -z $a ] 返回 false
-n检测字符串长度是否为 0,不为 0 返回 true[ -n "$a" ] 返回 true
str检测字符串是否为空,不为空返回 true[ $a ] 返回 true

在处理流程控制语句时,请使用vi或者vim编辑器去编辑,否则容易出现未预期的文件结尾错误

  1. 分支语句
    分支语句的关键字:if、elif 、else、fi
    如下示例,我们再次编辑test.sh为以下内容:

    #!/bin/sh
    a=10
    b=20
    if [ $a == $b ]; then echo "a 等于 b"
    elif [ $a -gt $b ]; then echo "a 大于 b"
    elif [ $a -lt $b ]; then echo "a 小于 b"
    else echo " 没有符合的条件 "
    fi

    运行结果如下:
    20230506151459.png

  2. 循环语句
    7.1 for循环
    如下示例,我们再次编辑test.sh为以下内容:

    #!/bin/sh
    for((i=1;i<=10;i++));
    do
    echo $(expr $i "*" $i "+" 1);
    done

    效果如下:
    20230506151809.png

  1. while循环
    这里let表示后面"i++"的自增,不用$。如下示例,我们再次编辑test.sh为以下内容:

    #!/bin/bash
    i=1
    while(( $i<=5 ))
    do
    echo $i
    let "i++"
    done

    效果如下:
    20230506152143.png

  2. until循环
    until 循环执行一系列命令条件为false继续,直至条件为 true 时停止。如下示例,我们再次编辑test.sh为以下内容:

    #!/bin/sh
    a=0
    until [ ! ${a} -lt 10 ]
    do
    echo ${a}
    let "a++"
    done

    效果如下:
    20230506152346.png

  3. case语句
    如下示例,我们再次编辑test.sh为以下内容:

    echo ' 输入 1 到 4 之间的数字 ,你输入的数字为 :'
    read Num
    case $Num in
    1) echo ' 你选择了 1' ;;
    2) echo ' 你选择了 2' ;;
    3) echo ' 你选择了 3' ;;
    4) echo ' 你选择了 4' ;;
    *) echo ' 你没有输入 1 到 4 之间的数字 ' ;;
    esac

    效果如下:
    20230506152741.png

continue代表停止当前循环,进入下次循环。
break代表终止循环。
  1. 函数
    函数语法如下:

    [ function ] funname [()]
    {
    action;
      [return int;]
    }

    如下示例,我们再次编辑test.sh为以下内容:

    demoFun(){
    echo " 这是我的第一个 Shell 函数 !"
    }
    echo "----- 函数开始执行 -----"
    demoFun
    echo "----- 函数执行完毕 -----"

    效果如下:
    20230506153045.png

资料参考

标签: linux, Shell脚本学习, Shell脚本编写

添加新评论