一)Shell特殊變量
$0 獲取當前執行的shell腳本的文件名
$n 獲取當前執行的shell腳本的第n個參數,n為1-9
$* 獲取當前shell的所有參數,如果給$*加上雙引號,例如"$*" 表示將所有參數視為單個字符串,相當于"$1$2$3"
$#獲取當前shell腳本后面接的參數的個數
$@ 將所有參數$1 $2 $3當作單個個體
[root@server01 ~]# for i in "$*";do echo $i;done
I AM handsome oldby
[root@server01 ~]# for i in "$@";do echo $i;done
I AM
handsome
oldby
[root@server01 ~]# for i in $*; do echo $i;done
I
AM
handsome
oldby
[root@server01 ~]# for i;do echo $i;done ----》不加in,相當于$@
I AM
handsome
oldby
案例1:
[ $# -ne 2 ] && { #<==如果執行腳本傳參的個數不等于2,
echo "muse two args" #<==則給用戶提示正確的用法。
exit 1 #<==由于不滿足要求,因此退出腳本,返回值為1。
}
2)Shell進程中的特殊變量
$? 特殊變量功能,獲取執行命令后獲取返回值
[root@server01 ~]# pwd
/root
[root@server01 ~]# echo $?
0
[root@server01 ~]# ls /root
anaconda-ks.cfg install.log install.log.syslog rsync_server.sh shell_scripts
[root@server01 ~]# echo $?
0-------------》返回0,表示上一個命令的執行時成功的
[root@server01 ~]# cd /test
-bash: cd: /test: No such file or directory
[root@server01 ~]# echo $?
1-------------》上一個命令執行失敗
[root@server01 ~]# mkddir /test
-bash: mkddir: command not found
[root@server01 ~]# echo $?
127
[root@server01 ~]# rm -rf /
rm: it is dangerous to operate recursively on `/'
rm: use --no-preserve-root to override this failsafe
[root@server01 ~]# echo $?
1
案例2:
[root@server01 ~]# cd /etc/
[root@server01 etc]# tar zcf /opt/service.tar.gz ./services
[root@server01 etc]# echo $?---》檢查備份后$?是否為0
0
[root@server01 ~]# sh a.sh &
[1] 12149
[root@server01 ~]# cat /tmp/a.pid
12149
[root@server01 ~]# kill -USR2 `cat /tmp/a.pid`
-bash: kill: (12149) - No such process
[1]+ Done sh a.sh
[root@server01 ~]# ps -ef|grep a.sh
root 12253 12099 0 05:55 pts/1 00:00:00 grep a.sh