shell中特殊符號

1 Shell中的特殊符號程序員

變量說明shell

$$
Shell自己的PID(ProcessID)
$!
Shell最後運行的後臺Process的PID
$?
最後運行的命令的結束代碼(返回值)
$-
使用Set命令設定的Flag一覽
$*
全部參數列表。如"$*"用「"」括起來的狀況、以"$1 $2 … $n"的形式輸出全部參數。
$@
全部參數列表。如"$@"用「"」括起來的狀況、以"$1" "$2" … "$n" 的形式輸出全部參數。
$#
添加到Shell的參數個數
$0
Shell自己的文件名
$1~$n
添加到Shell的各參數值。$1是第1參數、$2是第2參數…。express

 

1.1 $ 美圓符號。用來表示變量的值。如變量NAME的值爲Mike,則使用$NAME就能夠獲得「Mike」這個值。編程

 

1.2 # 井號。除了作爲超級用戶的提示符以外,還能夠在腳本中作爲註釋的開頭字母,每一行語句中,從#號開始的部分就不執行了。bash

 

1.3 「」 雙引號。shell不會將一對雙引號之間的文本中的大多數特殊字符進行解釋,如#再也不是註釋的開頭,它只表示一個井號「#」。但$仍然保持特殊含義。(在雙引號中的$加變量名,即:$PARAM_NAME,依然會轉換成變量的值。)編程語言

1.3.1 雙引號對於某些特殊符號是不起做用的, 例如:」,$,,`(反引號)函數

1.3.2 雙引號和單引號不能嵌套。即:echo ‘」」’ 輸出」」, echo 「’’」 輸出’’測試

 

1.4 ‘’ 單引號。shell不會將一對單引號之間的任何字符作特殊解釋。(在雙引號中的$加變量名,即:$PARAM_NAME,不會轉換成變量的值。)spa

1.4.1 echo 「$HOME」 (結果:/home/xiongguoan).net

1.5 `` 倒引號。命令替換。在倒引號內部的shell命令首先被執行,其結果輸出代替用倒引號括起來的文本,不過特殊字符會被shell解釋。

1.5.1 echo ‘$HOME’ (結果:$HOME)

 

1.6 \ 斜槓。用來去掉在shell解釋中字符的特殊含義。在文本中,跟在\後面的一個字符不會被shell特殊解釋,但其他的不受影響。

1.7 []中括號, 主要是用來測試條件的,一般放在if語句的後面。 (不過仍是不太明白),可是中括號自己不會在測試語句執行後消失。

1.7.1 echo [$HOME] (結果:出現錯誤)

1.7.2 echo [$HOME ] (結果:[/home/xiongguoan ]) (注意:HOME後面有空格哦。)

1.7.3 echo [$HOME –eq ‘/xiong’] (結果:[/home/xiongguoan –eq /xiong])

 

1.8 {}大括號,主要是和$符號配合,做爲字符串鏈接來使用

1.8.1 echo ${HOME}ismydir (結果:/home/xiongguoanismydir)

 

2 預約義的變量

2.1 特殊變量

特殊變量及說明 變量名 說明 $# 傳遞給腳本的參數個數 ;  $* 傳遞給腳本的全部參數的值   ;  $@ 與$*相同 $$ 腳本執行所對應的進程號  ;  $! 後臺運行的最後一個進程的進程號  ;  $- 顯示Shell使用的當前選項 $? 顯示命令的退出狀態,0:正確,1:錯誤。

$  shell變量名的開始,如$var

| 管道,將標準輸出轉到下一個命令的標準輸入

$# 記錄傳遞給Shell的自變量個數

 

Shell 算術運算符一覽表

算術運算符 說明/含義
+、- 加法(或正號)、減法(或負號)
*、/、% 乘法、除法、取餘(取模)
** 冪運算
++、-- 自增和自減,能夠放在變量的前面也能夠放在變量的後面
!、&&、|| 邏輯非(取反)、邏輯與(and)、邏輯或(or)
<、<=、>、>= 比較符號(小於、小於等於、大於、大於等於)
==、!=、= 比較符號(相等、不相等;對於字符串,= 也能夠表示至關於)
<<、>> 向左移位、向右移位
~、|、 &、^ 按位取反、按位或、按位與、按位異或
=、+=、-=、*=、/=、%= 賦值運算符,例如 a+=1 至關於 a=a+1,a-=1 至關於 a=a-1


可是,Shell 和其它編程語言不一樣,Shell 不能直接進行算數運算,必須使用數學計算命令,這讓初學者感受很困惑,也讓有經驗的程序員感受很奇葩。

 

 特殊變量


$0:當前腳本的文件名
$num:num爲從1開始的數字,$1是第一個參數,$2是第二個參數,${10}是第十個參數
$#:傳入腳本的參數的個數
$*:全部的位置參數(做爲單個字符串) 
$@:全部的位置參數(每一個都做爲獨立的字符串)。
$?:當前shell進程中,上一個命令的返回值,若是上一個命令成功執行則$?的值爲0,不然爲其餘非零值,經常使用作if語句條件
$$:當前shell進程的pid
$!:後臺運行的最後一個進程的pid
$-:顯示shell使用的當前選項
$_:以前命令的最後一個參數

 

注意: 1,變量名和等號之間不能有空格;

2,首個字符必須爲字母(a-z,A-Z)。

3, 中間不能有空格,可使用下劃線(_)。

4, 不能使用標點符號。

5, 不能使用bash裏的關鍵字(可用help命令查看保留關鍵字)。

註釋開始

&      在後臺執行一個進程

?      匹配一個字符

  • 匹配0到多個字符(與DOS不一樣,可在文件名中間使用,而且含.)

$-       使用set及執行時傳遞給shell的標誌位

$!        最後一個子進程的進程號

$?       取最近一次命令執行後的退出狀態(返回碼)

$*      傳遞給shell script的參數

$@     全部參數,個別的用雙引號括起來

$0      當前shell的名字

$n(n≥1)           傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是 $1,第二個參數是 $2

$#             傳遞給腳本或函數的參數

$$             當前 Shell 進程 ID。對於 Shell 腳本,就是這些腳本所在的進程 ID
 

$n (n:1-) 位置參數

$$ 進程標識號(Process Identifier Number, PID)

輸出重定向

< 輸入重定向

輸出重定向(追加方式)

[] 列出字符變化範圍,如[a-z]

 

2.2 代值變量

  • 任意字符串

? 一個任意字符

[abc] a, b, c三者中之一

[a-n] 從a到n的任一字符

 

2.3 特殊字符的表達

\b                           退回
\c                            打印一行時沒有換行符 這個咱們常常會用到
\f                            換頁
\r                            回車
\t                            製表
\v                            垂直製表
\                             反斜線自己

 

2.4 其餘字符

2.4.1 分號

;                            表示一行結束

2.4.2 圓括號

() 表示在新的子shell中執行括號內的命令(這樣能夠不改變當前shell的狀態。)

可是圓括號在單/雙引號內失去做用,只做爲普通字符。

2.4.3 花括號

2.4.3.1 分割命令的用法

與圓括號類似,可是:1. 花括號內的命令在當前shell中執行;2.花括號必須做爲命令的第一個字符出現。

2.4.3.2 引用變量的用法

在$後面,表示變量名的開始和結束

2.4.4 方括號

至關與test命令,用來執行測試條件,一般用在須要判斷條件的語句後面,例如:if,while等等。

 

3 設置變量

3.1 格式        :       VARNAME=value (i.e. PARAM=’hello’)

3.2 注意:

3.2.1 等號的先後不能有空格

3.2.2 若是變量的值是一個命令的執行結果,請加上反引號(`)。

 

4 引用變量

4.1 $VARNAME

4.1.1 e.i. echo $HOME (結果:/home/xiongguoan)

4.2 變量默認值

4.2.1 在引用一個變量的時候能夠設定默認值。若是在此以前,該變量已經設定了值,則此默認值無效。若是此時變量沒有被設定值,則使用此默認值(可是沒有改變此變量的值)。

4.2.2 echo Hello ${UNAME:-there} #其中there是UNAME的默認值

4.2.3 其餘關於默認值與判讀變量的方法:

利用大括號表示變量替換

表示形式

說明

${VARIABLE}

基本變量替換。大括號限定變量名的開始和結束

${VARIABLE:-DEFAULT}

若是VARIABLE沒有值,則這種表示形式返回DEFAULT的值

${VARIABLE:=DEFAULT}

若是VARIABLE沒有值,則這種表達形式返回DEFAULT的值。另外,若是VARIABLE沒有設置,則把DEFAULT的值賦予它

${VARIABLE:+VALUE}

若是VARIABLE被設置,則這種表示形式返回VALUE;不然,返回一個空串

${# VARIABLE}

這種表示形式返回VARIABLE值的長度,除非VARIABLE是* 或者@在爲*或者@的特殊狀況下,則返回$@所表示的元素的個數。要記住,$ @保存傳給該腳本的參數清單

${VARIABLE:?MESSAGE}

若是VARIABLE沒有值,則這種表示形式返回MESSAGE的值。Shell也顯示出VARIABLE的名字,因此這種形式對捕得到錯誤頗有用

4.2.4 注意:

4.2.4.1 使用${VALIABLE:?MESSAGE},若是發現此變量此時沒有值,則腳本中止運行並顯示行號和變量名稱。 主要用於調試。

4.2.4.2

 

5 位置變量

5.1 使用$1,$2,$3…$9,${10},${11}…來表明輸入的參數。其中$0表明被執行的命令或者腳本的名字。$1,$2…表明輸入的第1,2…個參數

5.2 例子:

cat count.sh#!/bin/sh

A=$1 # 將位置$1的數值讀入,並賦給變量A

B=$2 # 將位置$2的數值讀入,並賦給變量B

C=$[$A+$B] # 將變量A與B的值相加,將結果賦給C

echo $C # 顯示C的數值

結果:

./count.sh 3 6

9

./count.sh 34 28

62

5.3 $@和$*表明參數的列表    ,   $#表明參數的數量 (不知道$@和$*之間的差異)

6 運算符和優先級

Shell運算符和它們的優先級順序

級別

運算符

說明

13

-, +

單目負、單目正

12

!, ~

邏輯非、按位取反或補碼

11

  • , / , %

乘、除、取模

10

+, -

加、減

9

<< , >>

按位左移、按位右移

8

< =, > =, < , >

小於或等於、大於或等於、小於、大於

7

= = , ! =

等於、不等於

6

&

按位與

5

^

按位異或

4

|

按位或

3

&&

邏輯與

2

| |

邏輯或

1

=, + =, - =, * =, /=, % =, & =, ^ =, | =, << =, >> =

賦值、運算且賦值

7 source / export / let / unset

7.1 source

7.1.1 正常狀況下,腳本中執行的參數設置只能影響到shell腳本自己的執行環境,不能影響到調用此shell的腳本。

7.1.2 使用source命令執行腳本,可讓腳本影響到父shell的環境(即調用此shell的當前shell)。

7.1.3 例如:source env.sh

7.2 export

7.2.1 在bash下,使用export創建環境變量後,會影響到子shell腳本和當前shell的環境變量

7.3 unset

7.3.1 刪除環境變量

7.3.2 i.e.

#export newval=1

#echo $newval

1

#unset newval

#echo $newval

(ß此處爲空行,newval已經被刪除)

7.4 let

7.4.1 在bash中只用此命令能夠創建一個臨時的變量,此變量不會影響到子shell

 

8 邏輯判斷

8.1 if

8.1.1 單格式與嵌套

if 條件表達式
then #當條件爲真時執行如下語句
命令列表
else #爲假時執行如下語句
命令列表
fi

if 語句也能夠嵌套使用

if 條件表達式1
then
if 條件表達式2
then
命令列表
else
if 條件表達式3
then
命令列表
else
命令列表
fi
fi
else
命令列表
fi

8.1.2 多分支格式

if test -f "$1"
then
lpr $1
elif test -d "$1" #elif 同else if
then
(cd $1;lpr $1)
else
echo "$1不是文件或目錄"
fi

8.2 case

8.2.1 格式

case $newval in

  1. #這裏是可能值1

echo 1

;; #表示第一個分支結束

  1. #這裏是可能值 2

echo 2

;; #第二個分支結束

*) #表示其餘可能值,必須在最後,不然他後面的語句沒法執行

echo unkown

esac #case 語句結束

8.2.2

8.3 while /until

8.3.1 格式

while 表達式

do

命令列表

done

8.3.2 例如:

Sum=0
i=0
while true #true是系統的關鍵詞 表示真
do
i=expr $i + 1
Sum=expr $Sum + $i
if [ $i = "100" ]
then
break;
fi
done
echo $i $Sum
最後這個程序顯示的是 100 5050

下面將這個程序再改動一下

Sum=0
i=0
while [ $i != "100" ]
do
i=expr $i + 1
Sum=expr $Sum + $i
done
echo $i $Sum

改動後的程序運算結果和上面是同樣 但程序比上面的要簡練

在這個循環中還能夠以until作爲測試條件 它正好與while測試的條件相反,也就是當條件爲假時將繼續執行循環體內的語句,不然就退出循環體,下面還用這個例子.

Sum=0
i=0
until [ $i = "100" ]
do
i=expr $i + 1
Sum=expr $Sum + $i
done
echo $i $Sum
當i不等於100時循環 就是當條件爲假時循環,不然就退出,而第一個例子是當i不等於100
時循環,也就是測試條件爲真時循環.

8.4 for

8.4.1 枚舉用法

8.4.1.1 格式

for 變量 in 名字列表
do
命令列表
done

8.4.1.2 格式

for n in {1..10}

do

echo $n

done

for letter in a b c d e;

do

echo $letter

done

8.4.2 文件用法

8.4.2.1 格式

for file in *

do

echo $file

done

8.4.2.2 例子

for File in a1 a2 a3 a4 a5
do
diff aa/$File bb/$File
done

8.4.3 累加格式

for (( i=1;$i<10;i++))

do

echo $i

done

for(( i=1;$i<10;i=$[$i+1’ ])

do

echo $i

done

8.4.4

8.5 其餘循環控制語句

break 命令不執行當前循環體內break下面的語句從當前循環退出.
continue 命令是程序在本循體內忽略下面的語句,從循環頭開始執行.

 

8.6 邏輯判斷的表達

1、判斷文件的屬性

格式:-操做符 filename
-e                   文件存在返回1, 不然返回0
-r                    文件可讀返回1,不然返回0
-w                   文件可寫返回1,不然返回0
-x                   文件可執行返回1,不然返回0
-o                  文件屬於用戶本人返回1, 不然返回0
-z                   文件長度爲0返回1, 不然返回0.
-f                   文件爲普通文件返回1, 不然返回0
-d                  文件爲目錄文件時返回1, 不然返回0

 

2、測試字符串
字符串1 = 字符串2 當兩個字串相等時爲真
字符串1 != 字符串2 當兩個字串不等時爲真
-n 字符串      當字符串的長度大於0時爲真
-z 字符串      當字符串的長度爲0時爲真
字符串       當串字符串爲非空時爲真

 

3、測試兩個整數關係
數字1 -eq 數字2          兩數相等爲真
數字1 -ne 數字2          兩數不等爲真
數字1 -gt 數字2           數字1大於數字2爲真
數字1 -ge 數字2             數字1大於等於數字2爲真
數字1 -lt 數字2           數字1小於數字2爲真
數字1 -le 數字2          數字1小於等於數字2爲真

 

4、邏輯測試
-a         與
-o        或
!        非

9 shell中的表達式

9.1 shell 輸出重定向

9.1.1 管道 |

就管道符前的命令的輸出做爲管道符後的命令的輸入。

ls | grep ‘.txt’

將ls的輸出做爲grep 的輸入。 grep從輸入中找出全部包含.txt的行。

9.1.2 輸出 >

將右尖括號前的命令的輸入重定向到尖括號後的文件中。

例如:

ls *.sh > list.txt

將當前目錄下全部末尾名爲sh的文件的列表寫入到list.txt

9.1.3 輸入 <

將左箭頭後面的文件做爲左箭頭前的命令的輸入。

例如:

grep 「a」 < test.sh

將test.sh中找到全部包含a的行

9.1.4 錯誤輸出重定向

默認bash有3個標準輸入輸出設備。

0 標準輸入

1 標準輸出

2錯誤輸出

若是執行腳本的時候發生錯誤,會輸出到2上。

要想就將錯誤的輸出也輸出在標準輸出上,須要重定向。

例如:

./test.sh > a.log 2>&1

後面2>&1就是將標準錯誤的輸出重定向到標準輸出上。

9.2 tee

9.2.1 將此命令的輸入分叉,一支輸出到屏幕一支能夠重定向到其餘位置。

例如: ./test.sh | tee >a.txt 2>&1

運行test.sh,經過tee輸出到a.txt,同時屏幕上能夠看到輸出。而且將錯誤輸出重定向到標準輸出( 2>&1 )

9.3 cpio

9.3.1 文件或目錄打包

9.3.1.1 含子目錄打包

find . -name '*.sh' | cpio -o > shell.cpio

將當前目錄及其子目錄下的sh文件打包成一個文件庫爲shell.cpio。

9.3.1.2 不含子目錄的打包

ls *.sh | cpio -o > shell.cpio

將當前目錄下的sh文件(不含子目錄)打包成一個文件庫爲shell.cpio。

9.3.2  壓縮

文件打包完成後,便可用Unix中的compress命令(/usr/bin下)壓縮打包文件。對通常的文本文件,壓縮率較高,可達81%。

例如:compress shell.cpio則將文件庫壓縮爲shell.cpio.Z(自動添加.Z並刪除shell.cpio )。

9.3.3  解壓

uncompress shell.cpio.Z則自動還原爲shell.cpio。

9.3.4  解包展開

將按原目錄結構解包展開到當前所在目錄下。若以相對路徑打包的,當解包展開時,也是以相對路徑存放展開的文件數據;若以絕對路徑打包的,當解包展開時,也是以絕對路徑存放展開的文件數據。所以注意若爲相對路徑,應先進入相應的目錄下再展開。

cd /u1

cpio –id < shell.cpio 解壓到當期目錄。

cpio –iud < shell.cpio則文件若存在將被覆蓋,即強制覆蓋。

cpio –id < shell.cpio env.sh 解壓縮env.sh

9.3.5  顯示包內的文件

cpio –it < shell.cpio

9.4 exec

9.4.1 將此命令後的參數做爲命令在當前的shell中執行,當前的shell或者腳本不在執行。

例如: exec ls

當前進程替換爲ls,執行結束後就退出了。

例如:在a.sh 中包含

exec b.sh 則當a.sh 執行到此句後,被b.sh替換,a.sh中此句後的語句不會再被執行。

9.5 fork

9.5.1 將此命令的參數,新建一個進程來執行

例如:在a.sh 中包含

fork b.sh 則當a.sh 執行到此句後,被b.sh替換,a.sh中此句後的語句繼續執行。b.sh在新的進程中同時執行。

9.6 expr

9.6.1 expr argument operator argument

9.6.2 通常用於整數的運算。 例如:

#set newval=1

#echo $newval

1

#set newval=expr $newval + 1

#echo $newval

2

#set newval=$newval+1

#echo $newval

2+1

9.7 test

9.7.1 測試,一般用在須要判斷的語句後面,例如:if,while,等等。

9.7.2 不少時候能夠和中括號[]互換,我不知道區別是什麼。

9.7.3 例子:

i=1

if test」$ i」 == 「1」

then

echo true

else

echo false

fi

9.8 exit

退出當前的shell,執行結果能夠在shell中用$?查看

例如:exit 2

9.9 read

從標準輸入讀取數據。

例: $ read var1 var2 var3 Hello my friends $ echo $var1 $var2 $var3 Hello my friends $ echo $var1 Hello

9.10 shift

9.10.1 每次調用的時候,將參數列表中的第一個參數去掉。這樣能夠循環獲得第一個參數。

9.10.2 例子

#cat t.sh

sum=0

until [ $# -eq 0 ]

do

echo $*

sum=expr $sum + $1

shift

done

echo result is: $sum

#./t.sh 1 2 3

1 2 3

2 3

3

10 附件一:例子腳本

10.1 腳本1

10.2

11 附件二:Linux 易被遺漏的命令解析

11.1 grep

11.1.1 grep ‘string’ filename

11.1.1.1e.i.: grep ‘list’ mytxt.txt 在mytxt.txt中尋找包含list字符串的全部行

11.1.2 「-v」 : 相反的。 即不包含字符串。

11.1.2.1e.i.: grep –v ‘list’ mytxt.txt

11.1.3 cat mytxt | grep ‘list’

將cat mytxt做爲源, 從中查找包含list字符串的行

11.2 find

11.2.1 -atime n : 指查找系統中最後n*24小時訪問的文件;

11.2.2 -ctime n : 指查找系統中最後n*24小時被改變狀態的文件;

11.2.3 -mtime n : 指查找系統中最後n*24小時被修改的文件。

11.2.4 在當前目錄下(包含子目錄),查找全部txt文件並找出含有字符串"bin"的行 find ./ -name "*.txt" -exec grep "bin" {} ;

11.2.5 在當前目錄下(包含子目錄),刪除全部txt文件 find ./ -name "*.txt" -exec rm {} ;

11.3 du

11.3.1 顯示文件的大小

11.3.2 i.e.

#du *.txt

1230 myfile1.txt

456 myfile2.txt

11.4 awk

11.4.1 提取輸入中的某個參數

11.4.2 i.e. 提取輸入中每一行的第一個參數

#echo du *.txt | awk ‘{print $1}’

1230 456

提取子字符串

#echo du *.bin | awk '{print substr($1,2,3)}'

11.5 先後臺運行

11.5.1 將某個程序在後臺啓動起來,只須要在命令的最後加上 & 符號。

例如: ./test.sh &

11.5.2 將當前正在運行的程序切換到後臺

11.5.2.1當按下^z的時候,當前的應用程序就會切換到後臺,可是此時的狀態是中止的狀態。

11.5.2.2使用jobs命令能夠看到當前在後臺運行的程序的列表。

例如:jobs

[1]+ stopped top

[2]+stopped find | grep *.txt > a.log

11.5.2.3使用bg命令能夠將某個後臺程序繼續運行。

#bg %2

#jobs

[1]+ stopped top

[2]+ Running find | grep *.txt > a.log

11.5.3 將後臺運行的程序切回到前臺

#fg %2

將find 命令切回到前臺

11.6 shell的執行選項

-n 測試shell script語法結構,只讀取shell script但不執行 -x 進入跟蹤方式,顯示所執行的每一條命令,用於調度 -a Tag all variables for export -c "string" 從strings中讀取命令 -e 非交互方式 -f 關閉shell文件名產生功能 -h locate and remember functions as defind -i 交互方式 -k 從環境變量中讀取命令的參數 -r 限制方式 -s 從標準輸入讀取命令 -t 執行命令後退出(shell exits) -u 在替換中如使用未定義變量爲錯誤 -v verbose,顯示shell輸入行

11.7 alias

創建別名

alias dir ls

11.8 xargs

執行本命令的第一個參數,並將xargs的輸入做爲被執行命令的參數

例如:

find . -name '*.c' | xargs cat

將本目錄及其子目錄下全部的C文件使用cat命令顯示其內容。

12 附件三:Bash中影響環境變量的命令

Shell有若干以變量爲工做對象的命令,其中有些命令彷佛重複了。例如,能夠用declare、export和typeset命令來建立全局(或轉出)的變量。typeset命令是declare的同義詞。

Declare 命令

語法:

declare [options] [name [= value]]

摘要:

用於顯示或設置變量。

declare命令使用四個選項:

-f 只顯示函數名

-r 建立只讀變量。只讀變量不能被賦予新值或取消設置,除非使用declare或者typeset命令

-x 建立轉出(exported)變量

-i 建立整數變量。若是咱們想給一個整數變量賦予文本值,其實是賦予0使用+ 代替-,能夠顛倒選項的含義。

若是沒有使用參數,則declare顯示當前已定義變量和函數的列表。讓咱們關注一下-r選項:

$ declare –r title=" paradise Lost"

$ title = " Xenogenesis"

bash: title: read-only variable

$ declare title= " Xenogenesis"

$ echo $title

Xecogenesis

$ typeset title = " The Longing Ring」

$ echo $title

The Longing Ring

這個示例代表,只有declare或typeset命令能夠修改只讀變量的值。

export命令

語法:

export [options] [name [= value]]

摘要:

用於建立傳給子Shell的變量。

export命令使用四個選項:

-- 代表選項結束。全部後續參數都是實參

-f 代表在「名-值」對中的名字是函數名

-n 把全局變量轉換成局部變量。換句話說,命名的變量再也不傳給子Shell

-p 顯示全局變量列表

若是沒有用參數,則假定是一個-p參數,而且顯示出全局變量的列表:

$ export

declare –x ENV = "/home/medined/ . bashrc"

declare –x HISTFILESIZE = "1000"

declare –xi numPages = "314"

declare –xr title = "The Longing Ring"

declare –xri numChapters = "32"

這種顯示的一個有趣的特性是,它告訴咱們哪些變量只能是整數、是隻讀的,或者兩者皆可。

let命令

語法:

let expression

摘要:

用於求整數表達式的值。

let命令計算整數表達式的值。它一般用來增長計數器變量的值,如例5-9所示。

例5-9 let——使用let命令

! /bin/bash

count=1

for element in $@

do

echo " $element is element $count"

let count+=1

done

下面是這個腳本運行結果示例:

$ chmod + x let

$ . /let one two three

one is element 1

two is element 2

three is element 3

注意:若是咱們習慣在表達式中使用空格,那麼要用雙引號把表達式括起來,如:

let "count + =1"

不然會致使語句錯誤。

local 命令

語法:

local [name [= value]]

摘要:

用於建立不能傳給子Shell的變量。這個命令僅在過程內部有效。

簡單說來,local命令建立的變量不能被子Shell存取。所以,只能在函數內部使用local命令。咱們能夠在命令行或腳本中使用「變量=值」這種形式的賦值命令。若是使用local時不帶實參,那麼當前已定義的局部變量列表就送往標準輸出顯示。

readonly命令

語法:

readonly [options] [name[ = value]]

摘要:

用於顯示或者設置只讀變量。

Readonly命令使用兩個選項:

-- 代表選項結束。全部後續參數都是實參

-f 建立只讀函數

若是沒有用參數,則readonly顯示當前已定義的只讀變量和函數的列表。

set命令

語法:

set [--abefhkmnptuvxidCHP] [-o option] [name [= value]]

摘要:

用於設置或者重置各類Shell選項。

set 命令可實現不少不一樣的功能——並不是其中全部的功能都與變量有關。因爲本節的其餘命令重複了經過set命令可用的那些變量選項,因此這裏對set命令不作詳細說明。

shift命令

語法

shift [n]

摘要:

用於移動位置變量。

shift命令調整位置變量,使$3的值賦予$2,而$2的值賦予$1。當執行shift命令時,這種波動做用影響到所定義的各個位置變量。每每使用shift命令來檢查過程參數的特定值——如爲選項設置標誌變量時。

typeset命令

語法:

typeset [options] [name [= value]]

摘要:

用於顯示或者設置變量。

typeset 命令是declare命令的同義詞。

unset命令

語法:

unset [options] name [name …]

摘要:

用於取消變量定義。

unset命令使用兩個選項:

-- 代表選項結束,全部後續參數都是實參

-f 建立只讀函數

unset命令從Shell環境中刪除指定的變量和函數。注意,不能取消對PATH、IFS、PPID、PS一、PS二、UID和EUID的設置。若是咱們取消RANDOM、SECONDS、LINENO或HISTCMD等變量的設置,它們就失去特有屬性。

相關文章
相關標籤/搜索