三、SHELL變數知識進階與實踐
(一)shell特殊位置變數
1.獲取腳本的名字($0)
$0:獲取腳本的名字,如果腳本前跟著路徑的話,那就獲取路徑加上腳本名字,
企業應用:一般在腳本最后,使用$0獲取腳本的路徑和名字給用戶,
2、獲取腳本的第n個引數($n)
$n:獲取腳本后的第n個引數,n大于9以后,數字需要用大括號括起來,
企業應用:腳本中,提取第n個引數,
3、獲取腳本的所有引數個數($#)
$#:腳本后所有引數的個數,
企業應用:判斷引數個數,
4、獲取腳本的所有引數
$*:獲取shell腳本中所有的引數,所有單數是一個整體:"$1,$2,$3"
$@:獲取腳本的所有引數,每個引數是一個整體:"$1","$2","$3"
當需要接收腳本后所有引數,但是又不知道個數的時候,使用$*,$#
兩者區別:
[root@centos6-kvm3 scripts]# cat test.sh
#!/bin/bash
for arg in "$*"
do
echo $arg
done
echo ------
for arg1 in "$@"
do
echo $arg1
done
echo $#
[root@centos6-kvm3 scripts]# bash test.sh "i am" oldboy teacher.
i am oldboy teacher.
------
i am
oldboy
teacher.
3
[root@centos6-kvm3 scripts]#
(二)shell行程特殊狀態變數
①$?:獲取上一個命令的回傳值,回傳值為0,表示成功,非0,表示失敗,
②$$:獲取當前執行腳本的行程號,
③$!:獲取上一個后臺作業的行程的行程號,
④$_:獲取在此前執行命令或者腳本的最后一個引數,
(三)shell變數子串知識及實踐(變數內容)
1、獲取變數長度
[root@centos6-kvm3 scripts]# oldboy="i am oldboy"
[root@centos6-kvm3 scripts]# echo ${oldboy}
i am oldboy
${#變數}:獲取變數字符個數,
[root@centos6-kvm3 scripts]# echo ${#oldboy}
11
[root@centos6-kvm3 scripts]# echo ${oldboy}|wc -L
11
計算變數字符個數方法2:
[root@centos6-kvm3 scripts]# expr length "$oldboy"
11
計算變數字符個數方法3:
[root@centos6-kvm3 scripts]# echo $oldboy| awk '{print length }'
11
[root@centos6-kvm3 scripts]# echo $oldboy| awk '{print length($0) }'
11
[root@centos6-kvm3 scripts]# echo $oldboy| awk '{print length($1) }'
1
獲取變數第二個引數后引數:
[root@centos6-kvm3 scripts]# echo ${oldboy:2}
am oldboy
[root@centos6-kvm3 scripts]# echo ${oldboy:2:2}
am
[root@centos6-kvm3 scripts]#
2、匹配變數子串
${引數#字串}:匹配開頭,洗掉最短匹配,
[root@centos6-kvm3 scripts]# OLDBOY=abcABC12345ABCabc
[root@centos6-kvm3 scripts]# echo ${OLDBOY}
abcABC12345ABCabc
[root@centos6-kvm3 scripts]# echo ${OLDBOY#a*C}
12345ABCabc
${引數##字串}:匹配開頭,洗掉最長匹配,
[root@centos6-kvm3 scripts]# echo ${OLDBOY##a*C}
abc
${引數%字串}:匹配結尾,洗掉最短匹配,
[root@centos6-kvm3 scripts]# echo ${OLDBOY%a*c}
abcABC12345ABC
${引數%%字串}:匹配結尾,洗掉最長匹配,
[root@centos6-kvm3 scripts]# echo ${OLDBOY%%a*c}
[root@centos6-kvm3 scripts]#
3、替換字串里的子串
${變數/part/string}:使用string替換part第一個匹配項,
[root@centos6-kvm3 scripts]# oldboy="i am oldboy oldboy"
[root@centos6-kvm3 scripts]# echo ${oldboy/oldboy/oldgirl}
i am oldgirl oldboy
${變數//part/string}:使用string替換part所有匹配項,
[root@centos6-kvm3 scripts]# echo ${oldboy//oldboy/oldgirl}
i am oldgirl oldgirl
[root@centos6-kvm3 scripts]#
(四)shell特殊變數擴展知識
1、變數臨時賦值
result=${變數:-word}:當變數為空時候,將word賦值給result,冒號可以省略,
[root@centos6-kvm3 scripts]# result=${test:-UNSET}
[root@centos6-kvm3 scripts]# echo $result
UNSET
[root@centos6-kvm3 scripts]# echo $test
企業應用:
[root@centos6-kvm3 scripts]# find ${path:-/tmp} -name "*.log" -mtime +7| xargs rm -f
[root@centos6-kvm3 scripts]#
2、變數賦值
result=${變數:=word},變數為空時候,work復制給result,同時復制給變數,
[root@centos6-kvm3 scripts]# result=${test:=UNSET}
[root@centos6-kvm3 scripts]# echo ${result}
UNSET
[root@centos6-kvm3 scripts]# echo ${test}
UNSET
[root@centos6-kvm3 scripts]#
3、變數賦值提示
${變數:?word}:當變數為空時候,提示word,
[root@centos6-kvm3 scripts]# result=${test1:?變數為空}
-bash: test1: 變數為空
[root@centos6-kvm3 scripts]# echo $result
UNSET
[root@centos6-kvm3 scripts]# echo $test1
[root@centos6-kvm3 scripts]# test1=oldboy
[root@centos6-kvm3 scripts]# result=${test1:?變數為空}
[root@centos6-kvm3 scripts]# echo $result
oldboy
[root@centos6-kvm3 scripts]#
4、變數賦值覆寫
${變數:+word}:如果前面變數為空,什么不做,如果不為空,進行覆寫,
[root@centos6-kvm3 scripts]# result1=${test2:+wordk}
[root@centos6-kvm3 scripts]# echo ${result1}
[root@centos6-kvm3 scripts]# echo ${test2}
[root@centos6-kvm3 scripts]# test2=2
[root@centos6-kvm3 scripts]# result1=${test2:+wordk}
[root@centos6-kvm3 scripts]# echo ${result1}
wordk
[root@centos6-kvm3 scripts]# echo ${test2}
2
[root@centos6-kvm3 scripts]#
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/93358.html
標籤:Linux
