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

來源:互聯網
上載者:User

Shell編程(指令碼)的常用命令和語句,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  fidone
調用其他程式:
  • 使用``,並獲得輸出結果:
      PS3="請選擇一個分支:"      select branch in `svn list svn://<svn_host>/java/code/branches`;do        if [ $branch ];then          svn_dir="svn://<svn_host>/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 $piddone
(原創文章,轉載請註明
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.