一、 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 是取出目錄