Shell編程(指令碼)的常用命令和語句

來源:互聯網
上載者:User

Shell編程(指令碼)的常用命令和語句
一些常用的Shell編程(指令碼)命令和語句,可以滿足一般需求。
接收到的命令參數:
參數個數: $#
參數值: 命令本身:$0 第一個參數:$1 第二個參數:$2 ……
退出命令: exit
echo命令:
換行: echo
輸出後不換行: echo -n "請選擇(y/n)?"
利用轉義符號輸出雙引號: echo "歡迎使用\"正式伺服器\"部署工具。"
輸出中帶變數: echo "即將部署項目:$project_name"
輸出帶轉義符的字串: echo -e "first\tsecond"
輸出到檔案 追加到檔案尾:echo -e $log_info >> deploy.log 覆蓋檔案內容:echo -e $log_info > deploy.log
printf命令: (可以代替echo,格式化輸出,和C語言中的printf函數功能相同)

輸出一個小數點後兩位的數,並換行: printf "The number is %.2f.\n" 100
輸出一個指定寬度的字串: 靠左對齊:printf "%-20s %-15s %10.2f\n" "Stephen" "Liu" 35 靠右對齊:printf "|%10s|\n" hello
變數:
定義: profile="production"
使用: echo $profile
變數拼接: log_info="$log_info,$target_ip"
數組:
定義: servers=("192.168.0.31" "192.168.0.39") projects=("public" "industry" "logistics" "misc")
獲得整個數組: ${projects[*]}
獲得數組元素個數: ${#servers[@]}
if 語句(條件判斷同樣適用於while語句和for語句):
判斷一個變數(project)是否非空: if [ $project ];then echo "Variable \"project\" is null." fi
判斷不等於: if [ $# -ne 3 ];then echo "命令列參數不是3個" fi
布爾值判斷: if [ "$is_ip_correct" = false ];then echo "無效的ip地址,請使用下面ip之一:" echo ${servers[*]} exit fi
字串相等判斷: if [ "$confirm" == "y" ] && [ "$confirm" != "n" ];do # do something... fi
Regex判斷 if [[ $1 =~ ^public|industry$ ]] && [[ $3 =~ ^[yn]$ ]];then # do something... fi
if [[ ! $deploy_more =~ [yn] ]];then # do something... fi
判斷檔案是否存在: if [ ! -f target/$project.war ];then # do something...
fi
判斷目錄是否存在: if [ -d $2/webapps/$1 ];then # do something... fi
判斷一個檔案名稱(字串)的尾碼 backup_file="/backup/java_data/$1-$today.war" backup_file="/backup/java_data/$1-$today.gz"
if [ "${backup_file##*.}" = "war" ];then cp $backup_file $1.war elif [ "${backup_file##*.}" = "gz" ];then tar zxvf $backup_file else echo "備份檔案格式不對" exit fi
read 語句(讀取使用者輸入的字串):
最簡單的用法:讀取使用者輸入到變數yes_or_no read yes_or_no
提示使用者輸入y或n read -e -p "是否備份:(y/n)?" -i "y" needbackup (參數說明:-e:不知有什麼用,但如果去掉了,-i就失效了;-p:後面接著提示句;-i:後面接著預設輸入;最後一個參數是儲存使用者輸入的變數。)
select 語句(提示使用者從列表中選擇一個):
修改預設提示(預設值是"#?"): PS3="請選擇一個項目:"
提示使用者從數組中選擇一個值: select project in ${projects[*]};do if [ $project ];then break fi done
或加上允出準則: select target_ip in ${servers[*]} "Exit(退出)";do if [ "$target_ip" = "Exit(退出)" ]; then echo "謝謝使用!Good-Bye!" break fi
if [ $target_ip ]; then # do something fi done
case 語句: case $project in public) project_name="福士版" ;; logistics) project_name="配送版" ;; misc) project_name="雜項版" ;; esac
while 語句:
配合Regex判斷使用: while [[ ! $needbackup =~ ^[yn]$ ]];do read -e -p "是否備份:(y/n)?" -i "y" needbackup done
用“...”做進度條 echo -n "等待$port 連接埠開啟……" while [ ! $pid_new ];do #sleep 1 pid_new=`netstat -nlp | grep $port | awk '{print $7}' | awk -F "/" '{print $1}'` echo -n "…" done
for語句:
遍曆: for ip_t in ${servers[*]};do if [ "$2" = "$ip_t" ];then is_ip_correct=true break fi done
調用其他程式:
使用``,並獲得輸出結果: PS3="請選擇一個分支:" select branch in `svn list svn:///java/code/branches`;do if [ $branch ];then svn_dir="svn:///java/code/branches/$branch" project_dir=$branch break fi done
使用$(),並獲得輸出結果: today=$(date +%Y-%m-%d/%H:%M:%S) svn_version=$(svn info $svn_dir | grep "Last Changed Rev:" | awk '{print $4}')
無聲地調用其他程式(不輸出結果,即把結果輸出到一個null裝置中) rm $2/logs/m* $2/logs/l* $2/logs/h* $2/logs/catalina.2015* &>/dev/null &
awk(用來對字串進行切片處理,一般配合grep使用):
獲得以空格分隔的第四個字串: svn_version=$(svn info $svn_dir | grep "Last Changed Rev:" | awk '{print $4}')

獲得以特殊分隔字元("/")分隔的第一個字串 awk -F "/" '{print $1}'
擷取所有連接埠號碼為 $port 的進程,並殺掉 for pid in `netstat -nlp | grep $port | awk '{print $7}' | awk -F "/" '{print $1}'` do echo "==========================Warning========================" echo "無法正常關閉進程,連接埠:$port,直接kill掉,進程號:$pid" echo "==========================Warning========================" kill $pid done

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.