Shell變量知識進(jìn)階

一、shell中特殊且重要的變量

1、特殊位置變量

在shell中存在著一些特殊且重要的變量,例如:$0、$1、$#,我們可以稱之為特殊位置變量。要想從命令行、函數(shù)或腳本執(zhí)行等傳遞參數(shù)時(shí),就需要在Shell腳本中使用位置參數(shù)變量。

創(chuàng)新互聯(lián)建站專注于鄲城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供鄲城營銷型網(wǎng)站建設(shè),鄲城網(wǎng)站制作、鄲城網(wǎng)頁設(shè)計(jì)、鄲城網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造鄲城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供鄲城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

常用的特殊位置參數(shù)變量,如圖:
Shell變量知識進(jìn)階
舉例說明:
$0

[root@localhost ~]# cat a.sh
echo $0
[root@localhost ~]# sh a.sh
a.sh
[root@localhost ~]# sh /root/a.sh
/root/a.sh
[root@localhost ~]# dirname /root/a.sh
/root
//只輸出路徑名稱
[root@localhost ~]# basename /root/a.sh
a.sh
//只輸出腳本名稱

$n

[root@localhost ~]# cat a.sh
echo $1 $2 $3 $4 $5
[root@localhost ~]# sh a.sh a b c d e f
a b c d e
[root@localhost ~]# cat a.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
[root@localhost ~]# sh a.sh {a..z}
a b c d e f g h i a0 a1 a2 a3 a4 a5
//輸出第10個(gè)位置參數(shù)時(shí)就不正常了
[root@localhost ~]# cat a.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
[root@localhost ~]# sh a.sh {a..z}
a b c d e f g h i j k l m n o
//這樣就正常了,位置變量大于9,數(shù)字必須用“{}”括起來

$#

[root@localhost ~]# cat a.sh
echo $#
[root@localhost ~]# sh a.sh a b c d e f
6

**$***

[root@localhost ~]# cat a.sh
echo $*
[root@localhost ~]# sh a.sh "a b" c d e
a b c d e

$@

[root@localhost ~]# cat a.sh
echo $@
[root@localhost ~]# sh a.sh "a b" c d e
a b c d e f

不帶引號的“$*”和“$@”輸出的結(jié)果是一樣的!

*"$"**

[root@localhost ~]# cat a.sh
for i in "$*";do echo $i;done
[root@localhost ~]# sh a.sh "a b" c d e
a b c d e

"$@"

[root@localhost ~]# cat a.sh
for i in "$@";do echo $i;done
[root@localhost ~]# sh a.sh "a b" c d e
a b
c
d
e

2、特殊狀態(tài)變量

如圖:
Shell變量知識進(jìn)階

舉例說明:
$?

[root@localhost ~]# pwd
/root
[root@localhost ~]# echo $?
0
[root@localhost ~]# fsdafasdf
bash: fsdafasdf: 未找到命令...
[root@localhost ~]# echo $?
127
//執(zhí)行正確的命令返回值是0,不正確的是非0。
[root@localhost ~]# cat a.sh
if  
    [ $# -ne 2 ] 
then 
    echo "cuowu!"
    exit 123              //執(zhí)行腳本錯(cuò)誤時(shí),$?的值為123
fi
[root@localhost ~]# sh a.sh
cuowu!
[root@localhost ~]# echo $?
123

這個(gè)命令對于新手來說,非常有用!

“$?”返回值的用法:

  • 判斷命令、腳本或函數(shù)等程序是否執(zhí)行成功;
  • 若在腳本中調(diào)用執(zhí)行“exit 數(shù)字”,則會返回這個(gè)數(shù)字給“$?”變量;
  • 如果是在函數(shù)里,則通過“return數(shù)字”把這個(gè)數(shù)字以函數(shù)返回值的形式傳給“$?”變量;

剩下的有關(guān)“$$”、“$!”、“$_”不太常用,這里也不舉例說明了!

二、shell內(nèi)置變量命令

shell中包含一些內(nèi)置命令,這些內(nèi)置命令在目錄列表里是看不到的,它們由shell本身提供。常用的內(nèi)部命令有:echo、eval、exec、export、read、shift。接下來了解一下這些命令的功能。

echo命令
將echo命令后面指定的字符串及變量等內(nèi)容顯示到標(biāo)準(zhǔn)輸出。

echo的常用的參數(shù),如圖:
Shell變量知識進(jìn)階

舉例說明:

[root@localhost ~]# echo one;echo two
one
two
[root@localhost ~]# echo -n one;echo two
onetwo
//不換行輸出
[root@localhost ~]# echo -e "one\ttwo\nthree\tfour"
one two
three   four
//之間的空隙就是“\t”的作用,“\n”換行
[root@localhost ~]# echo -e "1\b23"
23
//“\b”的作用是退格,所以把1擋住了

關(guān)于echo命令很常用的,也沒什么難度,所以就介紹這么多!

關(guān)于eval命令不太常用,本人也沒怎么使用過,就不班門弄斧了!

exec命令:

exec命令能夠在不創(chuàng)建新的子進(jìn)程的前提下,轉(zhuǎn)去執(zhí)行指定的命令,當(dāng)指定的命令執(zhí)行完畢后,該進(jìn)程(也就是最初的Shell)也就終止了,示例如下:

[root@localhost ~]# exec date
Sun Sep 15 12:05:22 CST 2019
[lisi@localhost ~]$
//退回到特權(quán)模式

read命令:
從標(biāo)準(zhǔn)輸入字符串等信息,傳給Shell程序內(nèi)部定義的變量。

shift命令:
將位置參數(shù)$1、$2等進(jìn)行左移,如果位置變量是$1、$2、$3,那執(zhí)行一次shift后,$3就變成了$2,$2就變成了$1,$1也就消失了。

三、shell變量字符串

常用的選項(xiàng)舉例:
Shell變量知識進(jìn)階

(1)查詢字符長度值

舉例說明:
定義變量:

[root@localhost ~]# a=abcdef
[root@localhost ~]# echo ${a}
abcdef
[root@localhost ~]# echo $a
abcdef

返回變量值的長度

[root@localhost ~]# echo ${#a}
6

擴(kuò)展:

[root@localhost ~]# echo $a | wc -L
6
//使用wc命令統(tǒng)計(jì)長度
[root@localhost ~]# expr length "$a"
6
//使用expr的length函數(shù)計(jì)算
[root@localhost ~]# echo "$a" | awk '{print length($0)}'
6
//使用awk的length函數(shù)計(jì)算變量長度

這幾張方式,最快的就是${#變量名}這種方式

(2)截取字符長度

定義變量:

[root@localhost ~]# a="a b c d e f"
[root@localhost ~]# echo ${a}
a b c d e f

截取變量中的內(nèi)容,從第二個(gè)字符開始截?。J(rèn)截取到最后)

[root@localhost ~]# echo ${a:2}
b c d e f

截取變量中的內(nèi)容,從第二個(gè)字符開始截取2個(gè)字符
第一種方法:

[root@localhost ~]# echo ${a:2:4}
b c
//因?yàn)榭崭褚菜阕址?/code>

第二種方法:

[root@localhost ~]# echo ${a} | cut -c 3-5
b c

(3)刪除指定字符

定義變量:

[root@localhost ~]# a=abcABC123ABCabc
[root@localhost ~]# echo $a
abcABC123ABCabc
[root@localhost ~]# echo ${a#a*c}
ABC123ABCabc
[root@localhost ~]# echo ${a#a*C}
123ABCabc
//從變量內(nèi)容的開頭開始刪除最短匹配a*c及a*C的字符串
[root@localhost ~]# echo ${a##a*c}

//因?yàn)槿糠弦?,所以就不顯示了
[root@localhost ~]# echo ${a##a*C}
abc
//從變量內(nèi)容的開頭開始刪除最長匹配a*c及a*C的字符串
[root@localhost ~]# echo ${a%a*c}
abcABC123ABC
[root@localhost ~]# echo ${a%a*C}
abcABC123ABCabc
//從變量內(nèi)容的結(jié)尾開始刪除最短匹配a*c及a*C的字符串
[root@localhost ~]# echo ${a%%a*c}

[root@localhost ~]# echo ${a%%a*C}
abcABC123ABCabc
//從變量內(nèi)容的結(jié)尾開始刪除最長匹配a*c及a*C的字符串

關(guān)于刪除字符的小結(jié):

  • #:表示從開頭刪除匹配最短;
  • ##:表示從開頭刪除匹配最長;
  • %:表示從結(jié)尾刪除匹配最短;
  • %%:表示從結(jié)尾刪除匹配最長;

ac匹配的字符,表示所有,以a開頭,以c結(jié)尾;
aC匹配的字符,表示所有,以a開頭,以C結(jié)尾;

(4)替換指定字符

定義變量:

[root@localhost ~]# a="abc abc"
[root@localhost ~]# echo $a
abc abc
[root@localhost ~]# echo ${a/abc/ABC}
ABC abc
//替換第一個(gè)符合要求的字符
[root@localhost ~]# echo ${a//abc/ABC}
ABC ABC
//替換所有符合要求的字符

有關(guān)替換的小結(jié):

  • 一個(gè)“/”表示替換匹配的第一個(gè)字符串;
  • 兩個(gè)“//”表示替換匹配的所有字符串;

四、特殊擴(kuò)展變量

常用選項(xiàng),如圖:

Shell變量知識進(jìn)階
不太常用,這里就不舉例說明了!

本文標(biāo)題:Shell變量知識進(jìn)階
文章鏈接:http://bm7419.com/article36/ijpdsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站品牌網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、App設(shè)計(jì)、動態(tài)網(wǎng)站網(wǎng)頁設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)