3個例項介紹shell指令碼中幾個特殊引數的用法

大雄45發表於2021-03-05


導讀 在本文中討論的一些 特殊引數是:$*,$@,$#,$$,$!
示例1:使用 $*和$@ 來擴充套件位置引數

本例項 中使用$*和$@引數:

[root@localhost scripts]# vim expan.sh
#!/bin/bash
export IFS='-'
cnt=1
# Printing the data available in $*
echo "Values of \"\$*\":"
for arg in "$*"
do
  echo "Arg #$cnt= $arg"
  let "cnt+=1"
done
cnt=1
# Printing the data available in $@
echo "Values of \"\$@\":"
for arg in "$@"
do
  echo "Arg #$cnt= $arg"
  let "cnt+=1"
done

下面是執行結果:

[root@localhost scripts]# ./expan.sh "Hello world" 2 3 4
Values of "$*":
Arg #1= Hello world-2-3-4
Values of "$@":
Arg #1= Hello world
Arg #2= 2
Arg #3= 3
Arg #4= 4

3個例項介紹shell指令碼中幾個特殊引數的用法3個例項介紹shell指令碼中幾個特殊引數的用法

  • export IFS='-'表示使用" - "表示內部欄位分隔符。
  • 當列印引數 $*的每個值時,它只給出一個值,即是IFS分隔的整個位置引數。
  • $@將每個引數作為單獨的值提供。
示例2:使用$#統計位置引數的數量

$#是特殊引數,它可以提更 的位置引數的數量:

[root@localhost scripts]# vim count.sh
#!/bin/bash
if [ $# -lt 2 ]
then
  echo "Usage: $0 arg1 arg2"
  exit
fi
echo -e  "\$1=$1"
echo -e "\$2=$2"
let add=$1+$2
let sub=$1-$2
let mul=$1*$2
let div=$1/$2
echo -e "Addition=$add\nSubtraction=$sub\nMultiplication=$mul\nDivision=$div\n"

下面是執行結果:

[root@localhost scripts]# ./count.sh 
Usage: ./count.sh arg1 arg2
[root@localhost scripts]# ./count.sh 2314 15241
$1=2314
$2=15241
Addition=17555
Subtraction=-12927
Multiplication=35267674
Division=0

3個例項介紹shell指令碼中幾個特殊引數的用法3個例項介紹shell指令碼中幾個特殊引數的用法
指令碼中 if [ $# -lt 2 ]表示如果位置引數的數量小於2,則會提示"Usage: ./count.sh arg1 arg2"。

示例3:與過程相關的引數 $$和$!

引數 $$將給出shell指令碼的程式ID。 $!提供最近執行的後臺程式的ID,下面例項是列印當前指令碼的程式ID和最後一次執行後臺程式的ID:

[root@localhost scripts]# vim proc.sh
#!/bin/bash
echo -e "Process ID=$$"
sleep 1000 &
echo -e "Background Process ID=$!"

下面是執行的結果:

[root@localhost scripts]# ./proc.sh 
Process ID=14625
Background Process ID=14626
[root@localhost scripts]# ps
   PID TTY          TIME CMD
  3665 pts/0    00:00:00 bash
 14626 pts/0    00:00:00 sleep
 14627 pts/0    00:00:00 ps

3個例項介紹shell指令碼中幾個特殊引數的用法3個例項介紹shell指令碼中幾個特殊引數的用法

總結

在本文中討論的一些shell特殊引數是:$*,$@,$#,$$,$!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2761272/,如需轉載,請註明出處,否則將追究法律責任。

相關文章