經過前兩天的學習,關於shell的基礎算是知道的一般般啦,最起碼不算是小白了(純屬意淫)。今天就來點干貨哈。
首先是運行shell腳本時的參數傳遞。腳本內獲取參數的格式為$n。n代表了一個數字,例如1,就是腳本執行的第一個參數,2,就是腳本執行的第二個參數,以此類推哈。舉個栗子($0是執行的文件名稱):
#!/bin/bash echo "Shell 傳遞參數實例!"; echo "執行的文件名:$0"; echo "第一個參數為:$1"; echo "第二個參數為:$2"; echo "第三個參數為:$3";
運行上面的代碼的結果就是:
$ chmod +x test.sh $ ./test.sh 1 2 3 Shell 傳遞參數實例! 執行的文件名:./test.sh 第一個參數為:1 第二個參數為:2 第三個參數為:3
另外呢,還有幾個特殊的字符來處理參數:
參數處理 | 說明 |
---|---|
$# | 傳遞到腳本的參數個數 |
$* | 以一個單字符串顯示所有向腳本傳遞的參數。 如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 |
$$ | 腳本運行的當前進程ID號 |
$! | 后台運行的最后一個進程的ID號 |
$@ | 與$*相同,但是使用時加引號,並在引號中返回每個參數。 如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。 |
$- | 顯示Shell使用的當前選項,與set命令功能相同。 |
$? | 顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。 |
來個實例哈:
#!/bin/bash echo "Shell 傳遞參數實例!"; echo "第一個參數為:$1"; echo "參數個數為:$#"; echo "傳遞的參數作為一個字符串顯示:$*";
運行結果:
$ chmod +x test.sh $ ./test.sh 1 2 3 Shell 傳遞參數實例! 第一個參數為:1 參數個數為:3 傳遞的參數作為一個字符串顯示:1 2 3
其中呢,$*與$@都是用來引用所有的參數的,它們之間的不同點只有在雙引號中才能體現出來。假設在腳本運行的過程中傳入了三個參數,1、2、3,則“*”就等價於“1、2、3”,相當於傳遞了一個參數,而“@”等價於“1”,“2”,“3”,相當於傳遞了三個參數。這是需要各位看官注意一下的。那么就來個實例看看吧:
#!/bin/bash echo "-- \$* 演示 ---" for i in "$*"; do echo $i done echo "-- \$@ 演示 ---" for i in "$@"; do echo $i done
執行上面的代碼,輸出的結果就是:
$ chmod +x test.sh $ ./test.sh 1 2 3 -- $* 演示 --- 1 2 3 -- $@ 演示 --- 1 2 3
好啦,這個參數就到這里了。然后就是echo這個比較常見的命令了。phper對這個是比較熟悉的,它是用來輸出字符串的,效果呢,差不多,但是它可以執行命令,廢話不多說,大家看一下實例:
echo的命令格式就是:
echo string
首先,展示普通字符串:
echo "It is a test"
這里的雙引號是完全可以忽略的,只不過本人習慣性的操作哈,結果就是:
echo It is a test
再來展示轉義字符:
echo "\"It is a test\""
看一下結果:
"It is a test"
變量呢(read命令從標准輸入中讀取一行,並把輸入行的每個字段的值指定給shell變量):
#!/bin/sh read name echo "$name It is a test"
輸出的結果就是:
[root@www ~]# sh test.sh OK #標准輸入 OK It is a test #輸出
還可以顯示換行:
echo -e "OK! \n" # -e 開啟轉義 echo "It it a test"
看一下輸出:
OK! It it a test
再來顯示不換行的:
#!/bin/sh echo -e "OK! \c" # -e 開啟轉義 \c 不換行 echo "It is a test"
結果就是:
OK! It is a test
echo還可以顯示結果定向至文件:
echo "It is a test" > myfile
還能原樣輸出字符串,不進行轉義或取變量(用單引號):
echo '$name\"'
運行的結果就是:
$name\"
最主要的就是echo可以顯示命令執行的結果(以date命令為例):
echo `date`
顯示的結果為(注意:這里使用的是反引號·,而不是單引號,在Esc鍵下面,結果顯示當前時間):
Thu Jul 24 10:08:46 CST 2014
OK,今天的筆記就記錄到這里了,明天繼續分享別的命令工具,弱弱的說一句哈:本人純屬小白,分享的僅僅是筆記,各位看官勿噴哈。。。
原文鏈接:https://blog.csdn.net/luyaran/article/details/79374239