shell脚本学习 (五)杂项

一、 getopts

①简介

  • C有getopt_long函数用于解析命令行参数,在shell里用的是getopts。
  • 一般格式:getopts options variable
    getopts 一般是在循环中运行,每次执行循环,getopts 就检查下一个命令行参数,并判断它是否合法。即检查参数是否以 - 开头,后面跟一个包含在 options 中的字母。如果是,就把匹配的选项字母存在指定的变量 variable 中,并返回退出状态0;如果 - 后面的字母没有包含在 options 中,就在 variable 中存入一个 ?,并返回退出状态0;如果命令行中已经没有参数,或者下一个参数不以 - 开头,就返回不为0的退出状态。
#!/bin/bash
 
while getopts "a:" opt; do
  case $opt in
    a)
      echo "this is -a the arg is ! $OPTARG" 
      ;;
    \?)
      echo "Invalid option: -$OPTARG" 
      ;;
  esac
done

②其他:

  • getopts 允许把选项堆叠在一起(如 -ms)
  • 如要带参数,须在对应选项后加 : 。此时选项和参数之间至少有一个空白字符分隔,这样的选项不能堆叠。
  • 如果在需要参数的选项之后没有找到参数,它就在给定的变量中存入 ? ,并向标准错误中写入错误消息。否则将实际参数写入特殊变量 :OPTARG
  • 另外一个特殊变量:OPTIND,反映下一个要处理的参数索引,初值是 1,每次执行 getopts 时都会更新。

 

二、 source

  • source filepath
    该命令使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。
  •  source filename其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

 

三、 basename和dirname

  • basename 是去除目录后剩下的名字 
  • dirname 是取出目录

 

四、 export

  • Linux export命令用于设置或显示环境变量。在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。
  • 使用:
    export [-fnp][变量名称]=[变量设置值]
    -f  代表[变量名称]中为函数名称。
    -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
    -p  列出所有的shell赋予程序的环境变量。

 

五、 shell-init错误

  • 当一个shell脚本中,前面已经通过cd进入一个目录,然后后面在没退出那个目录前,把该目录删了,此时会出现错误。
  • 一般错误提示为:shell-init: error retrieving current directory:getcwd

 

你可能感兴趣的:(Linux,系统编程)