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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章