shell指令碼習題和執行個體

來源:互聯網
上載者:User

初學shell指令碼,將一些練習題以及我自己實際寫過的shell指令碼記錄於此,供學習查詢。

  • 使用者輸入y或Y結束

while方式
#!/bin/bash
read -p "input you choice : " c
while [ "$c" != "Y" -a "$c" != "y" ]
do
    read -p "input you choice : " c
done
echo "Ok!"

until方式
#!/bin/bash
until [ "$c" == "Y" -o "$c" == "y" ]
do
    read -p "input your choice : " c
done
echo "done!"

  • case、函數、函數參數使用方法

#!/bin/bash
function print()
{
    echo "Your choice is $1"
}

case $1 in
    "one")
    #echo "one"
    print 1
    ;;
    "two")
    #echo "two"
    print 2 
    ;;
    "three")
    #echo "othre"
    print 3 
    ;;
    *)
    echo "Usage $0 {one|two|three}"
    ;;
esac

  • shell指令碼中執行命令的方法

#!/bin/bash
str=$(whoami)    #或者:str=`whoami`(這裡的引號為反引號——ESC下面那個鍵)
echo $str

  • shell指令碼中for的使用方法

迴圈讀取字串中的每一個子串(以空格隔開)
#!/bin/bash
string="Waiting for a while"
for str in ${string}
do
    echo $str
done

迴圈讀取字串中的每一個子串(以空格隔開)
#!/bin/bash
for str in "Waiting for a while"
do
    echo $str
done

迴圈讀取ls命令返回結果的每一個
#!/bin/bash
for str in `ls`
do
    echo $str
done

迴圈次數的例子,for(())是bash支援的
#!/bin/bash
for ((i=0; i<10; i++))    #或者:for i in {1..10}
do
    echo $i
done

  • dirname 命令與指令碼語句$(dirname "${0}")

顯示指定路徑除了最後的檔案名稱或者目錄名之外的路徑首碼,
即截取給定路徑的目錄部分。例如:dirname /usr/bin/sort 得到/usr/bin。

在shell指令碼中經常看到這樣的語句:$(dirname "${0}")
說明:${0}表示當前指令碼的第一個參數,即程式的完整路徑,再執行dirname命令,
則取得當前指令碼所在的目錄。

還有語句:cd $(dirname "$0") || exit 1 
說明:$(dirname "$0")表示當前指令碼所在的目錄,cd即進入指令碼所在目錄,
失敗則exit 1(退出)。

更常見的準確寫法應該是:

THIS_DIR=$(readlink -f "$(dirname "${0}")")

  • grep妙用

今天在shell指令碼中看到這樣一條語句:

NUM_JOBS="$(grep -c "^processor" /proc/cpuinfo)"

檔案/proc/cpuinfo是cpu的資訊,grep -c只統計查詢結果的行數但是不輸出,Regex"^processor"表示以processor開始的行,查看/proc/cpuinfo檔案可以看出processor開始的行是cpu的第幾個核心的資訊。綜上可知上面的shell語句就是統計了當前機器的cpu核心數目。

  • 判斷字串是否是數

function isDigit(){if [ $# == 1 ];thenif [ `echo $1 | grep -P  "^\d+$" | wc -l` == 1 ];thenreturn 0;fifireturn 1;}isDigit '111'echo $?isDigit 'ass'echo $?

  • grep妙用

今天在shell指令碼中看到這樣一條語句:

NUM_JOBS="$(grep -c "^processor" /proc/cpuinfo)"

檔案/proc/cpuinfo是cpu的資訊,grep -c只統計查詢結果的行數但是不輸出,Regex"^processor"表示以processor開始的行,查看/proc/cpuinfo檔案可以看出processor開始的行是cpu的第幾個核心的資訊。綜上可知上面的shell語句就是統計了當前機器的cpu核心數目。

相關文章

聯繫我們

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