Linux 脚本进阶

Advanced Linux Scripting

  1. (source) 和 (.) 和 (bash + 脚本) 和 (./脚本)

    • 这几个命令都可以用来执行文件或者脚本,用法:

      test.sh脚本文件

      #!/bin/sh
      echo "Print Bash Path:$SHELL"
      export EXPORT_VAR=export
      export LOCAL_VAR=local
      echo $EXPORT_VAR
      echo $LOCAL_VAR
      
      source ./test.sh
      . ./test.sh
      ./test.sh
      bash ./test.sh
      

      可以看到执行结果都一样的,然而他们的区别是有不同的

    • 不同点

      1. (source) 和 (.) 的功能是一样的,用type souce 和 type . 命令看没有什么不同,help source可以看具体细节。(bash + 脚本) 和 (./脚本)区别主要是用不同的shell执行,下面不在讲(.)和(bash + 脚本)。
      2. (source)可以运行普通脚本,(./脚本)需要设置文件称可执行权限。如source ~/.bash_profile一般不是可执行权限。
      3. 这几个命令是会由父shell创建子进程去执行shell脚本,且会继承所有父shell的环境变量。,但(source)会返回,(./脚本)不会返回父shell,./test.sh;echo $EXPORT_VAR并不会再次打印变量值,但source ./test.sh;echo $EXPORT_VAR会。

    例子:一般修改vim配置会添加一个~/.vimrc文件,在里面会写一些vim设置比如设置行号就加set number,修改后直接用source ~/.vimrc刷新配置而不用重新启动shell或者设置可执行权限。

  2. function

    • 结构

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

      可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

    • 返回值

      函数的返回值为函数中最后一个执行的命令的状态值,通常我们可以用return来指定函数的返回值,return后跟数值n(0-255),函数返回值在调用该函数后通过 $? 来获得。

      注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

    • 函数参数

      在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,\(2表示第二个参数...,获取第十个参数需要\){10}。当n>=10时,需要使用${n}来获取参数

      $# -传递到脚本或函数的参数个数

      $* -以一个单字符串显示所有的参数

      $? -显示最后命令的退出状态。0表示没有错误,其他表示有错误。

    • reference

      Shell编程:function函数

      Shell 函数

  3. export

    • Linux export 命令用于设置或显示环境变量。

      在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。这样是为了我们定义一个变量时可以在子shell中被调用,而不需要重复去定义

    • 语法

      export [-fnp][变量名称]=[变量设置值]
      

      参数说明:

      -f  代表[变量名称]中为函数名称。

      -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。

      -p  列出所有的shell赋予程序的环境变量。

    • reference

      Linux export 命令

      shell与export命令

  4. read

    • Linux read命令用于从标准输入读取数值

      read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。

    • 语法

      read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
      

      参数说明:

      • -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
      • -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
      • -p 后面跟提示信息,即在输入前打印提示信息。
      • -e 在输入的时候可以使用命令补全功能。
      • -n 后跟一个数字,定义输入文本的长度,很实用。
      • -r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
      • -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
      • -t 后面跟秒数,定义输入字符的等待时间。
      • -u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
  5. if-then-elif-then-else-fi

    • 语法

      if  command
      then  
      commands
      elif command;then
      commands
      else
      commands
      fi
      

      在shell中,if后面是根据命令的退出状态来的。如果成功执行命令,状态为0,则执行then后面的命令,如果没有成功执行命令,状态为0以外的其他值,则then后面的命令则不会执行

    • reference

      linux结构化命令:if-then

posted @ 2020-07-22 09:27  风雪寒  阅读(121)  评论(0)    收藏  举报