• home > OS > Linux > Shell >

    Shell编程基本语法说明—知乎笔记

    Author:zhoulujun Date:

    无论是window还是liunx,自动化脚本都是懒人利器。在linux上,作为老站长,都没有去总结shell,实在有点说不过去

    笔记内容主要来源:shell基础 -- 基本语法 https://www.cnblogs.com/tongye/p/9707590.html


    变量

    在 shell 里,使用变量之前通常并不需要事先为他们做出声明,需要使用的时候直接创建就行了。

    默认情况下,所有变量都被看做字符串并以字符串来存储,即使它们被赋值为数值时也是如此。shell 和一些工具会在需要时把数值型字符串转换成对应的数值以对它们进行操作。

    命名规则-字母或下划线开头

    开头是一个字母或下划线,后面可以接任意长度的字母、数字或下划线符号,变量名的字符长度并无限制(Bourne shell中)。不过为了兼容性(一些早期的shell里变量名是有长度限制的),一般还是不要超过255个字符。另外,Linux 区分大小写。当用户自己定义变量的时候,要注意变量名不能与 shell 中的关键字重名

    变量的类型

    shell 中有四种类型的变量:用户自定义变量(局部变量)、环境变量(系统全局变量)、位置参数变量和预定义变量。

    环境变量

    一些主要的系统环境变量如下:

      环境变量                                                          描述                                                                          
      $HOME当前用户的家目录
      $PATH以冒号分隔的用来搜索命令的目录列表,决定了 shell 将到哪些目录中去寻找命令或程序
      $PS1命令提示符,通常是 $ 字符,也可以自行设置
      $PS2二级提示符,用来提示后续的输入,通常是 > 字符
      $IFS输入域分隔符。当 shell 读取输入时,它给出用来分隔单词的一组字符,通常是空格、制表符和换行符
      $0shell 脚本的名字
      $#传递给脚本的参数个数
      $$shell 脚本的进程号(PID),脚本程序通常会用它来生成一个唯一的临时文件,如 /tmp/tmpfile_$$

    export 变量名=变量值       # 创建环境变量并赋值

    位置参数变量

    位置参数变量主要用来向脚本中传递参数或数据,变量名不能自定义,变量作用也是固定的。主要有以下几种位置参数变量:

    位置参数变量描述
    $1、$2、...脚本程序的参数,分别代表程序的第1个参数、第2个参数、... 程序第10个以上的参数需要用大括号包含,如 ${10}
    $*代表命令行中的所有参数。在一个变量中将所有参数列出,各参数之间用环境变量 IFS 中的第一个字符分隔开。
    $@和 $* 一样,也包含了命令行中的所有参数,但是不使用 IFS 环境变量,即使 IFS 为空,参数也是分开显示的

    给变量赋值,使用等号即可

    但是等号两边千万不要有空格,等号右边有空格的字符串也必须用引号引起来:

    para1="hello world"#字符串直接赋给变量para1

    unset用于取消变量

    unset para1

    如何使用变量呢?

    使用变量时,需要在变量前加$,例如要打印前面para1的内容:

    echo "para1 is $para1"

    或者变量名两边添加大括号:

    echo "para1 is ${para1}!"

    入参和默认变量

    • 脚本名第一个参数第二个参数 第三个参数

    • $0 $1 $2 $3

    • /home/shouwang/test.sh para1 para2 para3

    除此之外,还有一些其他的默认变量,例如:

    • $# 代表脚本后面跟的参数个数,前面的例子中有3个参数

    • $@ 代表了所有参数,并且可以被遍历

    • $*代表了所有参数,且作为整体,和$*很像,但是有区别

    • $$ 代表了当前脚本的进程ID

    • $?代表了上一条命令的退出状态

    条件分支

    一般说明,如果命令执行成功,则其返回值为0,否则为非0,因此,可以通过下面的方式判断上条命令的执行结果:

    if[ $?-eq 0]
    then
    echo "success"
    elif[ $?-eq 1]
    then
    echo "failed,code is 1"
    else
    echo "other code"
    fi

    case语句使用方法如下:

    name="aa"
    case $name in
    "aa")
    echo "name is $name"
    ;;
    "")
    echo "name is empty"
    ;;
    "bb")
    echo "name is $name"
    ;;
    *)
    echo "other name"
    ;;
    esac

    待续……


    笔记源自内容:

    这些Shell编程必备知识你都掌握了吗? https://zhuanlan.zhihu.com/p/65106362


    转载本站文章《Shell编程基本语法说明—知乎笔记》,
    请注明出处:https://www.zhoulujun.cn/html/OS/Linux/LinuxShell/8512.html