最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell 腳本中常用的內(nèi)置變量(Bash 內(nèi)置變量)

 更新時(shí)間:2021年05月13日 08:27:11   作者:Linux開發(fā)那些事兒  
在 Bash 解釋器中,內(nèi)置了許多變量,這些變量的功能是解釋器自帶的,我們在編寫shell腳本時(shí)如果能靈活的使用它們,對腳本的編寫效率以及差錯(cuò)大有幫助, 下面一一介紹這些變量,一起看看吧

$FUNCNAME、$LINENO、$PWD

FUNCNAMELINENO 變量經(jīng)常用于腳本的調(diào)試

FUNCNAME 表示當(dāng)前函數(shù)的名字,作用范圍僅限函數(shù)中使用,在函數(shù)外無值

LINENO 表示當(dāng)前所在腳本中變量出現(xiàn)在的行號

PWD 表示當(dāng)前目錄, 對應(yīng)于 pwd命令

現(xiàn)有個(gè)腳本 a.sh 內(nèi)容如下

#!/bin/bash

   testa()
  {
    echo 'func='$FUNCNAME,$LINENO
   }
  testa
 
  echo 'lineno:'$LINENO
  echo 'xx:'$FUNCNAME
  echo 'curpath:'$PWD

執(zhí)行 ./a.sh 命令, 輸出如下

[tt@ecs-centos-7 ~]$ ./a.sh
func=testa,6
lineno:12
xx:
curpath:/home/tt

testa 函數(shù)中 FUNCNAME 變量值是 testa,也即函數(shù)名字,在函數(shù)外部無值

LINENO 變量無論是在函數(shù)中還是函數(shù)外,都表示當(dāng)前所在的行號

$$、$PPID

這兩個(gè)變量依次表示當(dāng)前進(jìn)程ID和父進(jìn)程ID

現(xiàn)有 a.sh 腳本,內(nèi)容如下

sleep 20 睡眠語句是為了讓執(zhí)行腳本進(jìn)程暫緩?fù)顺觯诹硪粋€(gè)終端中驗(yàn)證輸出的結(jié)果

#!/bin/bash
#set -u

echo 'cur pid:'$$
echo 'parent pid:'$PPID
sleep 20

在當(dāng)前終端執(zhí)行 ./a.sh,結(jié)果如下

[tt@ecs-centos-7 ~]$ ./a.sh 
cur pid:13095
parent pid:12982

在執(zhí)行a.sh的腳本進(jìn)程退出之前,打開另一個(gè)終端,執(zhí)行 ps -o pid,ppid,time,cmd -p 12982,13095 命令,結(jié)果如下

[tt@ecs-centos-7 ~]$ ps -o pid,ppid,time,cmd -p 12982,13095
  PID  PPID     TIME CMD
12982 12981 00:00:00 -bash
13095 12982 00:00:00 /bin/bash ./a.sh

從上面的結(jié)果可以看出, 執(zhí)行 ./a.sh 命令之后,$$ 變量表示的是 執(zhí)行a.sh腳本的進(jìn)程ID 13095 ,而 12982 是它的父進(jìn)程ID,也即是 PPID變量的值,它是當(dāng)前bash的實(shí)例

$0,$1,$2...$n、$#

$# 表示從命令行傳入腳本的參數(shù)數(shù)量

$0,$1,$2...$n 是從命令行傳遞到腳本的參數(shù) $0 是腳本本身的名字
$1 是第一個(gè)參數(shù)
$2 是第二個(gè)參數(shù),依此類推
$n 是第n個(gè)參數(shù)

第十個(gè)參數(shù)及以后的參數(shù)必須要用大括號括起來,例如: ${10}、${11}、${12} 依次表示第十個(gè)變量、第十一個(gè)變量、第十二個(gè)變量

$*、$@

都表示位置參數(shù),不過它們之間也有些不同點(diǎn)

使用 $* 時(shí),如果加上雙引號,即 $* 的形式,那所有位置的參數(shù)會(huì)被當(dāng)作一個(gè)單詞來處理,如果不包含雙引號,即 $* 的形式,則每個(gè)位置的參數(shù)都被當(dāng)作一個(gè)獨(dú)立的單詞來處理

而對于 $@,無論是否加上雙引號,每個(gè)位置的參數(shù)都被當(dāng)作一個(gè)獨(dú)立的單詞來處理

現(xiàn)有c.sh, 內(nèi)容如下

#!/bin/bash

cnt=1
echo 'test 1111'

for var in "$*"
do
   echo "arg$cnt="$var
   let "cnt+=1"
done
echo

cnt=1
echo 'test 2222'
for var in $*
do
  echo "arg$cnt="$var
  let "cnt+=1"
done
echo

cnt=1
echo 'test 3333'
for var in "$@"
do
  echo "arg$cnt="$var
  let "cnt+=1"
done
echo

cnt=1
echo "test 4444"
for var in $@
do
 echo "arg$cnt="$var
 let "cnt+=1"
done

執(zhí)行 ./c.sh 1 2 3,結(jié)果如下

[root@ecs-centos-7 ~]# ./c.sh 1 2 3
test 1111
arg1=1 2 3

test 2222
arg1=1
arg2=2
arg3=3

test 3333
arg1=1
arg2=2
arg3=3

test 4444
arg1=1
arg2=2
arg3=3

從上面的結(jié)果可以看出,對于 $* 來說,加了雙引號之后所有位置參數(shù)就會(huì)被視為一個(gè)單詞

對于 $@ 來說,是否加雙引號,結(jié)果都是一樣的

所以,僅在使用雙引號時(shí),$* 和 $@ 才會(huì)有差異

$?

命令、函數(shù)或者腳本的退出狀態(tài),在判斷命令的執(zhí)行結(jié)果或者函數(shù)的調(diào)用結(jié)果時(shí)很有用處

現(xiàn)有 e.shf.sh 測試腳本

e.sh 腳本

#!/bin/bash

test_func()
{
  if [[ $1 -eq 10 ]]; then
        return 5
  fi
  return 6
}


if [ $# -ge 1 ]; then
   name="$1"
   shift 1
   $name "$@"
fi

f.sh 腳本

#!/bin/bash


sh e.sh test_func 3
echo 'exit code1:'$?

sh e.sh test_func 10
echo 'exit code2:'$?

test -f $PWD/xx.txt
echo 'exit code3:'$?

test -f $PWD/e.sh
echo 'exit code4:'$?

執(zhí)行 ./f.sh 命令,結(jié)果如下

[root@ecs-centos-7 ~]# ./f.sh
exit code1:6
exit code2:5
exit code3:1
exit code4:0

腳本 e.shtest_func 函數(shù)功能是:當(dāng)參數(shù)等于10時(shí),退出狀態(tài)為 5,否則為 6

sh e.sh test_func 3 命令會(huì)調(diào)用 e.sh 腳本中的 test_func函數(shù),傳入?yún)?shù)是 3,所以退出狀態(tài)為 6,同理可知, sh e.sh test_func 10 命令的退出狀態(tài)是 5

在Linux中,命令執(zhí)行成功,退出狀態(tài)為 0 ,失敗則為非 0

test -f $PWD/xx.txt 命令是檢查當(dāng)前目錄是否存在 xx.txt 文件,因當(dāng)前目錄并不存在 xx.txt,所以命令執(zhí)行失敗,退出狀態(tài)為非 0

由于e.sh 存在于當(dāng)前目錄下,所以 test -f $PWD/e.sh 命令執(zhí)行成功,退出狀態(tài)為 0

$IFS

此變量用于 Bash 識別字符串或單詞邊界,默認(rèn)值是空格,腳本中根據(jù)需要可以修改此變量的值

現(xiàn)有 b.sh腳本,內(nèi)容如下

#!/bin/bash

va="a:b:c"
vb="x-y-z"
vc="e,f,g"

IFS=":"
echo 'va:'$va
echo 'vb:'$vb
echo 'vc:'$vc

echo

IFS="-"
echo 'va:'$va
echo 'vb:'$vb
echo 'vc:'$vc

echo

IFS=","
echo 'va:'$va
echo 'vb:'$vb
echo 'vc:'$vc

執(zhí)行 ./b.sh 結(jié)果如下

[tt@ecs-centos-7 ~]$ ./b.sh
va:a b c
vb:x-y-z
vc:e,f,g

va:a:b:c
vb:x y z
vc:e,f,g

va:a:b:c
vb:x-y-z
vc:e f g

從結(jié)果可以看出,當(dāng) $IFS: 時(shí),字符串 "a:b:c"被解析成 a b c

當(dāng) $IFS- 時(shí),字符串 "x-y-z"被解析成 x y z

當(dāng) $IFS, 時(shí),字符串 "e,f,g"被解析成 e f g

$HOME、$USER、$UID、$GROUPS

HOME:   用戶home目錄
USER:   當(dāng)前用戶名
UID:    當(dāng)前用戶ID
GROUPS: 當(dāng)前用戶組ID
[tt@ecs-centos-7 ~]$ echo $HOME
/home/tt
[tt@ecs-centos-7 ~]$ echo $USER
tt
[tt@ecs-centos-7 ~]$ echo $UID
1003
[tt@ecs-centos-7 ~]$ echo $GROUPS
1003

$HOSTTYPE、$MACTYPE、$OSTYPE

這些變量都表示系統(tǒng)硬件

[tt@ecs-centos-7 ~]$ echo $HOSTTYPE
x86_64
[tt@ecs-centos-7 ~]$ echo $MACHTYPE
x86_64-redhat-linux-gnu
[tt@ecs-centos-7 ~]$ echo $OSTYPE
linux-gnu

小結(jié)

本文介紹了一些常用的 Bash 內(nèi)置變量,對于一些生僻或者平常很少用到的變量可以自行查閱相關(guān)資料

以上就是shell 腳本中常用的內(nèi)置變量(Bash 內(nèi)置變量)的詳細(xì)內(nèi)容,更多關(guān)于shell內(nèi)置變量的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • linux網(wǎng)絡(luò)編程用到的網(wǎng)絡(luò)函數(shù)詳解用和使用示例

    linux網(wǎng)絡(luò)編程用到的網(wǎng)絡(luò)函數(shù)詳解用和使用示例

    本文對linux網(wǎng)絡(luò)編程用到的網(wǎng)絡(luò)函數(shù)做了簡單介紹,提供了使用示例供大家參考
    2013-11-11
  • Linux 使用grep篩選多個(gè)條件及grep常用過濾命令

    Linux 使用grep篩選多個(gè)條件及grep常用過濾命令

    這篇文章主要介紹了Linux 使用grep篩選多個(gè)條件及grep常用過濾命令,需要的朋友可以參考下
    2018-07-07
  • Linux自定義防誤刪腳本的思路與測試

    Linux自定義防誤刪腳本的思路與測試

    相信很多朋友都遇到過在linux下誤刪除文件的時(shí)候,此刻的心中仿佛有無數(shù)的羊駝在奔騰,下面這篇文章主要給大家介紹了關(guān)于Linux自定義防誤刪腳本的思路與測試的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 自動(dòng)生成linux網(wǎng)卡配置腳本分享

    自動(dòng)生成linux網(wǎng)卡配置腳本分享

    這篇文章主要介紹了自動(dòng)生成linux網(wǎng)卡配置的腳本,因?yàn)長inux虛擬機(jī)在復(fù)制時(shí)候網(wǎng)卡信息會(huì)更新,所以導(dǎo)致需要重新配置網(wǎng)卡。本腳本功能,第一次添加網(wǎng)卡后,啟動(dòng)虛擬機(jī),然后運(yùn)行腳本(可以寫在啟動(dòng)腳步中),然后根據(jù)ifconfig -a 的信息來創(chuàng)建ifcfg-ethX的配置文件或者修改對應(yīng)的ifcfg-ethX的mac
    2014-03-03
  • 8個(gè)實(shí)用的Shell腳本分享

    8個(gè)實(shí)用的Shell腳本分享

    這篇文章主要介紹了8個(gè)實(shí)用的Shell腳本分享,本文給出了判斷輸入為數(shù)字、字符或其他、求平均數(shù)、自減輸出、在文件中添加前綴、批量測試文件是否存在等實(shí)用腳本,需要的朋友可以參考下
    2015-06-06
  • 如何使用shell獲取進(jìn)程名的內(nèi)存以及CPU利用率

    如何使用shell獲取進(jìn)程名的內(nèi)存以及CPU利用率

    最近工作中遇到一個(gè)需求,需要找出占用高的進(jìn)程,所以下面這篇文章主要給大家介紹了關(guān)于如何使用shell獲取進(jìn)程名的內(nèi)存以及CPU利用率的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • linux中Jetty的安裝和配置方法

    linux中Jetty的安裝和配置方法

    下面小編就為大家?guī)硪黄猯inux中Jetty的安裝和配置方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • 實(shí)現(xiàn)shell終端代碼分享(可用戶登錄 實(shí)現(xiàn)系統(tǒng)命令)

    實(shí)現(xiàn)shell終端代碼分享(可用戶登錄 實(shí)現(xiàn)系統(tǒng)命令)

    實(shí)現(xiàn)shell終端代碼分享,實(shí)現(xiàn)用戶登錄,系統(tǒng)命令使用,大家參考實(shí)現(xiàn)吧
    2013-12-12
  • Shell 實(shí)現(xiàn)多任務(wù)并發(fā)的示例代碼

    Shell 實(shí)現(xiàn)多任務(wù)并發(fā)的示例代碼

    本文主要介紹了Shell 實(shí)現(xiàn)多任務(wù)并發(fā)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 利用shell創(chuàng)建文本菜單與窗口部件的方法

    利用shell創(chuàng)建文本菜單與窗口部件的方法

    這篇文章主要給大家介紹了關(guān)于利用shell創(chuàng)建文本菜單與窗口部件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11

最新評論

隆子县| 安图县| 个旧市| 阿坝县| 安远县| 浪卡子县| 临猗县| 确山县| 仙桃市| 宁陵县| 东至县| 忻州市| 扎鲁特旗| 太仆寺旗| 视频| 桂平市| 朔州市| 湘潭市| 新平| 天水市| 二连浩特市| 申扎县| 延川县| 宁陵县| 华坪县| 绥中县| 淄博市| 印江| 五常市| 资溪县| 商南县| 藁城市| 平度市| 兖州市| 甘德县| 呼伦贝尔市| 年辖:市辖区| 股票| 宁河县| 麻阳| 皮山县|