歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Shell一些例子

Shell一些例子

日期:2017/3/1 16:36:15   编辑:SHELL編程
Shell一些例子 bash不分區字符串和數值,如需計算數值可用$((.....)),但得到的結果不是數值. 函數內接受不了外面的變量傳值. www.2cto.com 正則表達式在匹配時是偷懶和正確匹配的和資源開銷的一種權衡. $# 腳本的參數個數 $* 以一個單字符串顯示所有向腳本傳遞的參數。與位置變量不同,此選項參數可超過9個 $$ 腳本運行的當前進程ID號 $! 後台運行的最後一個進程的進程ID號 www.2cto.com $@ 與$*相同,但是使用時加引號,並在引號中返回每個參數 $- 顯示shell使用的當前選項,與set命令功能相同 $? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。 $0 腳本名稱 $1..$9 第N個參數 函數基本使用: function functname{ shell commands } or functname(){ shell commands } bash的算術運算比較運算符\字符串比較運算符\文件比較運算符: 煮酒品茶:這個是比較全的.查一般的,請點這裡. 1、算術運算比較運算符(bash自身不能比較浮點數) -eq 等於 [ $num1 -eq $num2 ] -ne 不等於 [ 100 -ne $num1 ] -lt 小於 [ 100 -lt `expr $num1 + $num2` ] -le 小於或等於 [ 100 -le `expr $num1 \* $num2` ] -gt 大於 [ 100 -gt `expr $num1 / $num2` ] -ge 大於或等於 [ 100 -ge `expr $num1 % $num2` ] 2、字符串比較運算符 -z string 如果 string 長度為零,則為真 [ -z "`ps aux | grep mysql`" ] -n string 如果 string 長度非零,則為真 [ -n "$string" ] 【注意】 $string 一定要放在雙引號裡面 "$string",否則使用 -n -z 的結果都為真! string1 != string2 如果 string1 與 string2 不同,則為真 [ "$str1" != "Snail" ] string1 == string2 如果 string1 與 string2 相同,則為真 [ "$str1" == "$str2" ] (上面用一個 = 也可以,在嚴格的 POSIX 兼容下使用) string1 string2 如果 string1 按字典順序比較大於 string2,則為真 3、文件比較運算符 -a filename 如果 filename 存在,則為真 [ -e $HOME/.bashrc ] -e filename (同上) -b filename 如果 filename 存在,並且是塊文件,則為真 [ -e /dev/loop0 ] -c filename 如果 filename 存在,並且是字符文件,則為真 [ -e /dev/ttyS0 ] -d filename 如果 filename 存在,並且為目錄,則為真 [ -d /home/snail ] -f filename 如果 filename 存在,並且為常規文件,則為真 [ -f /dev/ttyS0 ] -g filename 如果 filename 存在,並且為set-group-id,為真 [ -f $HOME/ak47 ] -h filename 如果 filename 存在,並且為符號連接,則為真 [ -h /bin/vi ] -L filename (同上) -k filename 如果 filename 存在,並且設置了sticky位,為真 [ -k /bin/ping ] -p filename 如果 filename 存在,並且為有名管道(FIFO),真 [ -p /tmp/pipe ] -r filename 如果 filename 存在,並且可讀,則為真 [ -r /etc/passwd ] -s filename 如果 filename 存在,並且大小不為零,為真 [ -s ./none-zero ] -u filename 如果 filename 存在,並且為set-user-id,為真 [ -f $HOME/ak47 ] -w filename 如果 filename 存在,並且可寫,則為真 [ -w /var/log/mail ] -x filename 如果 filename 存在,並且可執行,則為真 [ -x ./start.sh ] 下面這些不常用的: -t fd 如果文件描述符被打開並指向一個終端,則為真 [ -t /proc/1/fd/10 ] 【提示】在 /proc/進程號/fd 下可以找到文件描述符:) -O filename 如果 filename 存在,並且被有效用戶ID所擁有,則為真 -G filename 如果 filename 存在,並且被有效組ID所擁有,則為真 -S filename 如果 filename 存在,並且為一個socket,則為真 [ -S /tmp/mysql.sock ] -N filename 如果 filename 存在,並且在上次讀取後被修改過,則為真 -o optname 如果 shell 選項 optname 被開啟,則為真 【提示】使用 set -o 來查看 file1 -nt file2 如果 file1 比 file2 新,或者 file1 存在 file2 不存在,則為真 file1 -ot file2 如果 file1 比 file2 舊,或者 file2 存在 file1 不存在,則為真 file1 -ef file2 如果 file1 和 file2 都指向同樣的設備(device)和索引節點號(inode numbers),則為真 【提示】查看文件的索引節點可以用 ls -i 選項 元字符 描述 \ 將下一個字符標記為一個特殊字符、或一個原義字符、或一個向後引用、或一個八進制轉義符。例如,“\n”匹配字符“n”。“\\n”匹配一個換行符。序列“\\”匹配“\”而“\(”則匹配“(”。 ^ 匹配輸入字符串的開始位置。如果設置了RegExp對象的Multiline屬性,^也匹配“\n”或“\r”之後的位置。 $ 匹配輸入字符串的結束位置。如果設置了RegExp對象的Multiline屬性,$也匹配“\n”或“\r”之前的位置。 * 匹配前面的子表達式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等價於{0,}。 + 匹配前面的子表達式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價於{1,}。 ? 匹配前面的子表達式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等價於{0,1}。 {n} n是一個非負整數。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個o。 {n,} n是一個非負整數。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等價於“o+”。“o{0,}”則等價於“o*”。 {n,m} m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個o。“o{0,1}”等價於“o?”。請注意在逗號和兩個數之間不能有空格。 ? 當 該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而 默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對於字符串“oooo”,“o+?”將匹配單個“o”,而“o+”將匹配所有“o”。 .點 匹配除“\n”之外的任何單個字符。要匹配包括“\n”在內的任何字符,請使用像“[\s\S]”的模式。 (pattern) 匹配pattern並獲取這一匹配。所獲取的匹配可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號字符,請使用“\(”或“\)”。 (?:pattern) 匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以後使用。這在使用或字符“(|)”來組合一個模式的各個部分是很有用。例如“industr(?:y|ies)”就是一個比“industry|industries”更簡略的表達式。 (?=pattern) 正 向肯定預查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例 如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配 “Windows3.1”中的“Windows”。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從 包含預查的字符之後開始。 (?!pattern) 正 向否定預查,在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如 “Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中 的“Windows”。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字符之後開始。 (?<=pattern) 反向肯定預查,與正向肯定預查類似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。 (?