linux shell 語言基礎(3)shell 特殊位置變數、source、sh、bash、./執行指令碼的區別等
一、shell 特殊位置變數
$0 檔名及路徑
$1~$n 新增到Shell的各引數值。$1是第1引數、$2是第2引數…
$* 傳遞給指令碼的所有引數列表如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有引數。
$#新增到shell 引數個數
$$ Shell本身的PID(ProcessID)
$? 最後執行命令結束的程式碼(還回值)
[email protected]所有引數列表。如"[email protected]"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有引數。
$- 使用Set命令設定的Flag一覽
二、source、sh、bash、./執行指令碼的區別
. 點命令,就是個點符號(從Bourne Shell而來)是source的另一名稱
source 命令(從 C Shell 而來)執行bash shell的內建命令
bash /bin/bash命令功能要比sh強大
export可新增,修改或刪除環境變數,供後續執行的程式使用。同時,重要的一點是,export的效力僅及於該次登陸操作。登出或者重新開一個視窗,export命令給出的環境變數都不存在了。
export PATH=/bin/bash:$PATH
(點 source bash sh ./執行的檔名)他們之間的區別
第一;點和source 執行方式是等價;即兩種執行方式都是在當前shell程序中執行此指令碼,而不是重新啟動一個shell 而在子shell程序中執行此指令碼。
第二:bash sh (可以無執行許可權)二者的執行檔案不同
./ (必須有執行許可權)三者執行方式是等價的;此三種執行指令碼的方式都是重新啟動一個子shell,在子shell中執行此指令碼。
驗證結果:
[[email protected] ~]#name=dangxu //定義一般變數
[[email protected] ~]# echo ${name}
dangxu
[[email protected] ~]# cat test.sh //驗證指令碼,例項化標題中的./*.sh
#!/bin/sh
echo ${name}
[[email protected] ~]# ls -l test.sh //驗證指令碼可執行
-rwxr-xr-x 1 root root 23 Feb 6 11:09 test.sh
[[email protected] ~]# ./test.sh //以下三個命令證明了結論一
[[email protected] ~]# sh ./test.sh
[[email protected] ~]# bash ./test.sh
[[email protected] ~]# . ./test.sh //以下兩個命令證明了結論二
dangxu
[[email protected] ~]# source ./test.sh
dangxu
[[email protected] ~]#
三、取變數或字串的長度方法
echo $a|wc -L
echo ${#a}
expr length "$a"
四、shell數值運算方法
expr
(())
let
bc
$[]
awk
typeset
五、read 命令 是bash 內建 幫助:help read
-p 設定提示資訊
-t設定輸入等待時間,單位預設秒