欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學堂Linux培訓分享Shell編程之特殊變量講解

2019-03-01 14:34:06 2931瀏覽

本篇文章小編給喜歡Linux開發(fā)技術或者是想要參加Linux培訓學習的小伙伴分享一下Shell編程之特殊變量講解,本篇文章小編會給大家列出詳細的代碼供大家參考,如果想要學習或者了解shell的小伙伴就來了解一下吧。



扣丁學堂Linux培訓分享Shell編程之特殊變量講解



特殊變量:


在Shell中的特殊變量主要分別兩種位置參數(shù)變量、狀態(tài)變量兩種。



位置參數(shù)變量:


Shell中的位置參數(shù)變量主要是指0、0、1、$#等,主要用于從命令行、函數(shù)或腳本執(zhí)行等地方傳遞參數(shù)。詳細說明如下所示:


$0:獲取當前執(zhí)行的Shell腳本的文件名,如腳本中包含路徑,則輸出也包括路徑

$n:獲取當前執(zhí)行的Shell腳本的第n個參數(shù)值,如n>9,則需要使用用大括號,如${10},各參數(shù)間用空格進行分隔


$#:獲取當前執(zhí)行的Shell腳本傳入?yún)?shù)的總個數(shù)

$*:獲取當前執(zhí)行的Shell所有傳入?yún)?shù),如不加引號則與$@功能相同,如果添加雙引號**"?",則表示將所有傳入?yún)?shù)視為單個字符串??,相當于"?",則表示將所有傳入?yún)?shù)視為單個字符串??,相當于"1 223"


$@:獲取當前執(zhí)行的Shell所有傳入?yún)?shù),**如不加引號則與$*功能相同,如果添加雙引號"@",則表示將所有傳入?yún)?shù)視為獨立的字符串??,相當于"@",則表示將所有傳入?yún)?shù)視為獨立的字符串??,相當于"1" "2""2""3"


當"?"和"?"和"@"都添加雙引號時,兩者的功能有所區(qū)別;如不加,則功能相同,無區(qū)別。


位置參數(shù)變量示例


1、示例一:


[root@localhost Test]# cat para.sh
#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
echo '$0 is:' $0
echo '$1 is:' $1
echo '$12 is:' ${12}
echo '$# is:' $#
echo '$* is:' $*
echo '"$*"is:' "$*"
echo '$@ is:' $@
echo '"$@"is:' "$@"
# 輸出結果
[root@localhost Test]# bash ~/Test/para.sh {a..z}
a b c d e f g h i j k l m n o
$0 is: /root/Test/para.sh
$1 is: a
$12 is: l
$# is: 26
$* is: a b c d e f g h i j k l m n o p q r s t u v w x y z
"$*"is: a b c d e f g h i j k l m n o p q r s t u v w x y z
$@ is: a b c d e f g h i j k l m n o p q r s t u v w x y z
"$@"is: a b c d e f g h i j k l m n o p q r s t u v w x y z

1、傳入的參數(shù)個數(shù)多于腳本定義的參數(shù)時,則多出的參數(shù)會忽略

2、傳入的參數(shù)中如使用雙引號,則會當作一個參數(shù)值進行傳遞

3、位置參數(shù)如大于9,需要使用${}進行傳遞


2、示例二:


[root@localhost Test]# cat testposition.sh 
#!/bin/bash
echo '$# $1 $2 $3 $* $@'
echo $# $1 $2 $3 $* $@
echo "************"
echo '$*'
for tmp in $*
 do
 echo $tmp
 done
echo "************"
echo "@@@@@@@@@@@@"
echo '$@'
for temp in $@
 do
 echo $temp
 done
echo "@@@@@@@@@@@@"

echo '"*"*"*"*"*"*'

echo '$*'
for i in "$*"
 do
 echo $i
 done
echo '"*"*"*"*"*"*'

echo '"@"@"@"@"@"@'

echo '$@'
for j in "$@"
 do
 echo $j
 done
echo '"@"@"@"@"@"@'

[root@localhost Test]# bash testposition.sh "Hello Jack" Welcome "to Shanghai"
$# $1 $2 $3 $* $@
3 Hello Jack Welcome to Shanghai Hello Jack Welcome to Shanghai Hello Jack Welcome to Shanghai
************
$* # 未加雙引號,所以會輸出全部參數(shù),則第一個和第三個參數(shù)會拆開
Hello
Jack
Welcome
to
Shanghai
************
@@@@@@@@@@@@
$@ # 未加雙引號,所以會輸出全部參數(shù),則第一個和第三個參數(shù)會拆開
Hello
Jack
Welcome
to
Shanghai
@@@@@@@@@@@@
"*"*"*"*"*"*
$* # 添加雙引號后,傳入的參數(shù)全部當一個參數(shù)進行輸出
Hello Jack Welcome to Shanghai
"*"*"*"*"*"*
"@"@"@"@"@"@
$@ # 添加雙引號后,傳入的參數(shù)全部當獨立的參數(shù)進行輸出
Hello Jack
Welcome
to Shanghai
"@"@"@"@"@"@

狀態(tài)變量


$?:獲取上一個命令或腳本的執(zhí)行狀態(tài)值(0:成功,其他:失敗)

$$:獲取當前執(zhí)行的Shell的進程號(PID)

$!:獲取上一個在后臺工作的進程的進程號

**$_**:獲取在些之前執(zhí)行的命令或腳本的最后一個參數(shù)


以上四個狀態(tài)變量,僅$?常用,其他三個了解即可。


在日常使場景中,$?主要用法如下所示:


1、判斷命令和腳本是否執(zhí)行成功

2、如腳本中調用exit 數(shù)字,則會返回該數(shù)字給$?

3、如在函數(shù)中,則可以通過return 數(shù)字將該數(shù)字返回給$?


狀態(tài)變量示例


1、$?示例:


[root@localhost Test]# ll /etc/profile
-rw-r--r--. 1 root root 1819 4月 11 2018 /etc/profile
[root@localhost Test]# echo $?
0
[root@localhost Test]# ll /etc/profild
ls: 無法訪問/etc/profild: 沒有那個文件或目錄
[root@localhost Test]# echo $?
2


2、$$示例:


[root@localhost Test]# cat testPID.sh
#!/bin/bash
echo $$ > /tmp/test.pid
sleep 300

[root@localhost Test]# bash testPID.sh & # 將當前腳本調用到后臺執(zhí)行
[1] 1671
[root@localhost Test]# ps -ef | grep testPID | grep -v grep
root 1671 23706 0 16:37 pts/0 00:00:00 bash testPID.sh # 查詢PID


3、!示例:!示例:!功能類似于$$,只不過是獲取上一次執(zhí)行腳本的PID


[root@localhost Test]# bash testPID.sh &
[1] 24078
[root@localhost Test]# echo $!
24078 # 打印上一次在后臺執(zhí)行的進程號
[root@localhost Test]# ps -ef | grep testPID | grep -v grep
root 24078 23706 0 16:42 pts/0 00:00:00 bash testPID.sh


4、$_示例:


[root@localhost Test]# bash para.sh {a..z}
a b c d e f g h i j k l m n o
$0 is: para.sh
$1 is: a
$12 is: l
$# is: 26
$* is: a b c d e f g h i j k l m n o p q r s t u v w x y z
"$*"is: a b c d e f g h i j k l m n o p q r s t u v w x y z
$@ is: a b c d e f g h i j k l m n o p q r s t u v w x y z
"$@"is: a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@localhost Test]# echo $_
z # 打印最后一個傳入的參數(shù)值


Bash 內(nèi)置變量


常用的內(nèi)部命令有echo、eval、exec、export、read、shift、exit。


echo


主要用于打印信息,其命令格式如下所示:


echo [options] args


常用參數(shù)如下所示:

扣丁學堂Linux培訓


echo常用轉義字符如下:

扣丁學堂Linux培訓


eval


當Shell程序運行到eval語句時,將讀入?yún)?shù)args,并將它們組合成一個新的命令而后執(zhí)行。其命令格式如下所示:


eval args


exec


exec主要用于在不創(chuàng)建新的子進程的情況下,轉而執(zhí)行指定的命令,當指定命令執(zhí)行完后,則終止該進程。其命令格式如下所示:


exec args


當使用exec打開文件后,read命令每次都會將文件指針移動到下一行進行讀取,直至結束。因此常用來處理文件內(nèi)容。


read


從標準輸入讀取變量或字符串等信息并傳遞給其他變量,其命令格式如下所示


read args


shift


對傳入的位置參數(shù)依次向左移動一個位置,并使用位置參數(shù)$#減1,直至0為止。其命令格式如下所示:


shift postition args


shift如果不帶參數(shù),則默認左移1位


如傳入的參數(shù)為112 3,如執(zhí)行一次shift,則之前的3,如執(zhí)行一次shift,則之前的3變成2,2,2變成1,1,1消失。


exit


常用于退出Shell,在日常使用過程中可使用exit num來自定義返回狀態(tài)數(shù)。



Bash 內(nèi)置變量示例


1、echo


[root@localhost Test]# echo "Test";echo "Dao"
Test
Dao
[root@localhost Test]# echo -n "Test";echo "Dao"
TestDao
[root@localhost Test]# echo -e "Test\tName\n Dao"
Test Name
 Dao


2、eval


[root@localhost Test]# cat eval.sh
#!/bin/bash

echo "No eval"
echo \$$#
echo "Add eval"
eval echo \$$#

[root@localhost Test]# bash eval.sh a b
No eval
$2 # 未添加evel時,$#為2,則輸出$2
Add eval
b # 添加evel后,則重新對傳入的參數(shù)進行解析,則輸出傳入的第2個參數(shù)


3、exec


[root@localhost Test]# exec ls
eval.sh para.sh ping.sh testPID.sh testposition.sh
[admin@localhost ~]$ # 在執(zhí)行exec后則終止當前Shell進程,因此從root用戶退出到普通用戶
# 與read一起讀取文件
[root@localhost ~]# seq 5 > /tmp/rand.log
[root@localhost ~]# cat /tmp/rand.log 
1
2
3
4
5
[root@localhost Test]# cat exec.sh
#!/bin/bash
exec < /tmp/rand.log
while read line
 do
 echo $line
 done
echo "Completed"

[root@localhost Test]# bash exec.sh
1
2
3
4
5
Completed


4、read


可以參考公眾號中read命令一文


5、shift


[root@localhost Test]# cat shift.sh
#!/bin/bash
echo $1 $2 $3 $4 $5
until [ -z $1 ]
do
 echo $@
 shift 1
done
[root@localhost Test]# bash shift.sh {1..5}
1 2 3 4 5
1 2 3 4 5
2 3 4 5
3 4 5
4 5
5


想要了解更多關于Linux開發(fā)方面內(nèi)容的小伙伴,請關注扣丁學堂Linux培訓官網(wǎng)、微信等平臺,扣丁學堂IT職業(yè)在線學習教育平有專業(yè)的Linux講師為您指導,此外扣丁學堂老師精心推出的Linux視頻教程定能讓你快速掌握Linux從入門到精通開發(fā)實戰(zhàn)技能??鄱W堂Linux技術交流群:422345477。


扣丁學堂微信公眾號


【關注微信公眾號獲取更多學習資料】



查看更多關于“Linux培訓資訊”的相關文章>>




標簽: Linux培訓 Linux視頻教程 紅帽Linux視頻 Linux學習視頻 Linux入門視頻

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部