目標
公司安排一個任務,在主機上添加自定義命令foo:在控制台輸入foo -version后,讀取一個特定文件並輸出。
思路
由於定義在~/.bashrc文件中的命令可以直接在控制台使用,因此可以編寫shell腳本,創建foo命令,把命令追加到用戶的~/.bashrc文件后,這樣用戶就可以在控制台直接使用。
實現
實現自定義命令
foo(){
case $1 in
'-version' )
PATH_TO_VERSION=~/version.properties
if [ ! -e $PATH_TO_VERSION ]
then
echo 'version file not exist'
else
grep version=* $PATH_TO_VERSION | cut -d'=' -f2
fi
;;
'*' | '' )
echo 'unknown argument type'
;;
esac
}
由於foo命令會帶上參數 -version,所以編寫一個函數,通過$1變量就能得到運行命令的第一個參數,也就是-version。
case in語句判斷$1變量的值,如果是’-version’,就開始查詢版本號:
首先檢查版本號文件是否存在。
若不存在就報錯。否則通過grep命令+cut命令,從版本號文件中找出version=*的模式串,用’=’分隔,再取出第二段,也就是版本號的值。
如果$1變量匹配到 ‘*’ 或為空,說明用戶輸入的參數不是-version,就報錯。
追加到.bashrc文件后
cat << 'EOF' >> ~/.bashrc
foo(){
case $1 in
'-version' )
PATH_TO_VERSION=~/version.properties
if [ ! -e $PATH_TO_VERSION ]
then
echo 'version file not exist'
else
grep version=* $PATH_TO_VERSION | cut -d'=' -f2
fi
;;
'*' | '' )
echo 'unknown argument type'
;;
esac
}
EOF
source ~/.bashrc
使用cat命令將上文的自定義命令追加到用戶的.bashrc文件后。由於代碼較長,這里就用了cat的大段文本模式。
首先<< ‘EOF’ 指定大段文本的結束標志為EOF,加上單引號是把代碼段中的$符號當作普通文本處理,防止腳本解析這些變量。
隨后 >> ~/.bashrc指定追加文件的路徑。
代碼段下的EOF說明大段文本到此為止。注意前面不能有空格。
最后,source命令讀取並執行.bashrc文件中定義的命令,這樣用戶就可以直接在控制台使用了。