初學shell指令碼,將一些練習題以及我自己實際寫過的shell指令碼記錄於此,供學習查詢。
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!"
#!/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
#!/bin/bash
str=$(whoami) #或者:str=`whoami`(這裡的引號為反引號——ESC下面那個鍵)
echo $str
迴圈讀取字串中的每一個子串(以空格隔開)
#!/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}")")
今天在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 $?
今天在shell指令碼中看到這樣一條語句:
NUM_JOBS="$(grep -c "^processor" /proc/cpuinfo)"
檔案/proc/cpuinfo是cpu的資訊,grep -c只統計查詢結果的行數但是不輸出,Regex"^processor"表示以processor開始的行,查看/proc/cpuinfo檔案可以看出processor開始的行是cpu的第幾個核心的資訊。綜上可知上面的shell語句就是統計了當前機器的cpu核心數目。