shell腳本--變量與數組


Linux中的變量有環境變量和用戶自定義變量,關於環境變量,可以查看這篇博客:linux環境變量

本文主要針對的是用戶在shell腳本中定義的變量,但是環境變量也可以在shell腳本中使用。

普通變量

注意事項:

  1. 變量名以英文字母或者下划線開頭,但是不能以數字開頭
  2. 變量名區分大小寫
  3. 變量名與等號之間,等號與變量值之間不要有空格
  4. 只有在使用變量的值的時候,才在變量名之前加$,其他情況,比如刪除、賦值、循環迭代都不用加$
  5. 如果一行只有一條命令,則每一行不用以分號結尾,每一條命令以換行分隔
  6. 如果一行有多條命令,則每一條命令以分號分隔,但建議每行只有一條命令
#!/bin/bash
#文件名:test.sh
name="beyond"
echo $name

  執行腳本:

ubuntu@ubuntu:~$ ./test.sh
beyond
ubuntu@ubuntu:~$ 

  

  有時候在使用變量的時候,變量名后面會跟着一些字符,如果這些字符與變量名之間沒有間隔,那么,這些字符也將被認為是變量的一部分,即$nameHello,解釋器回去找$nameHello,而不是找$name,可已使用兩種方法,一種是使用空格分隔,另外一種使用花括號將變量名括起來(不要將$括起來)。如下例

#!/bin/bash
#文件名:test.sh
name="beyond"
echo "one",$name
echo "two",$nameHello
echo "three",$name hello
echo "four",${name}hell

  執行腳本:

ubuntu@ubuntu:~$ ./test.sh
one,beyond
two,
three,beyond hello
four,beyondhell

  

  從用戶鍵盤讀取數據並賦值給變量,使用:read [-p "提示信息"] 變量名

#!/bin/bash
#文件名:test.sh

#輸出一段話,並等待用戶輸入,輸入的內容賦值給后面的變量
read -p "please input your name:" name
echo "welcome ${name}"

  執行腳本:

ubuntu@ubuntu:~$ ./test.sh
please input your name:beyond
welcome beyond
ubuntu@ubuntu:~$ 

  

  單引號與雙引號的區別:

  1、在單引號中,變量不能被解析;在雙引號中變量可以被解析。

  2、轉義字符在單引號和雙引號中都不會轉義,反引號的作用是將反引號括起來的命令(括起來的內容會被當成命令執行),然后將結果賦值給一個變量。

  注意,使用反引號將命令括起來之后,如果不將運行整個命令賦值給一個變量,那么就會將反引號中的命令的執行結果當成shell命令執行。

#!/bin/bash
#文件名:test.sh

name="beyond"
#雙引號括起來的變量能解析
echo one,"$name"

#雙引號括起來的變量不能解析,會輸出變量名
echo two,'$name'

#轉義字符在單引號和雙引號中都不會轉義
echo three,"$name\t hello"
echo four,'$name\t hello'

#echo `${name} \t hello`
#上面這條命令會出錯,因為bash會將beyond \t hello當做shell命令執行

str=`echo $name \t hello`
echo $str

str=`date`
#date是在命令行中獲取當前時間
echo "current time is $str"  

  執行腳本:

ubuntu@ubuntu:~$ ./test.sh
one,beyond
two,$name
three,beyond\t hello
four,$name\t hello
beyond t hello
current time is 2018年 01月 07日 星期日 18:50:59 CST

  變量的刪除使用unset 變量名,注意此時變量名之前不要加$符號

#!/bin/bash
#文件名:test.sh

name="beyond"

echo one,"$name"

//使用unset來刪除變量
unset name

echo $name

  執行腳本:

ubuntu@ubuntu:~$ ./test.sh
one,beyond

ubuntu@ubuntu:~$ 

 

位置變量:

咱們平時使用ls 查看當前目錄下的文件時,常常會帶-l -a -i等參數,這些參數就是位置變量,使用這些的方法:用$加數字(0-9)來獲取,如果數字大於9時,則會使用數字的最高位所代表的位置變量,然后這個位置變量會拼接上數字剩下的部分,所以說shell命令行最多可以傳遞9個參數(如果參數過多,可以將多個參數連接為一個參數來擴充),也可以使用${11}來獲取第11個位置參數

#!/bin/bash
#文件名:test.sh
echo $0
echo $1,"  ",$2,"  ",$3,"  ",$4,"  ",$5
echo $6,"  ",$7,"  ",$8," ",$9,"  ",$10
echo $11,"  ",$12

  執行腳本:

ubuntu@ubuntu:~$ ./test.sh a b c d e f g h i j k
./test.sh
a,  ,b,  ,c,  ,d,  ,e
f,  ,g,  ,h, ,i,  ,a0
a1,  ,a2
ubuntu@ubuntu:~$ 

  

預定義變量:

預定義變量名 含義
$0或者${0} 當前執行的進程名/腳本名/程序名
$#或者${#} 命令行中位置參數的總數量
$*或者${*} 所有位置參數的內容
$?或者${?} 上一條命令執行的返回結果,0表示正常,非0表示異常或出錯


  

#!/bin/bash
#文件名:test.sh

echo "進程名:"$0
echo "位置參數的數量:"$#
echo "所有位置參數的內容:"$*

#執行一條非法語句,執行異常,返回非0
`echo "hello world"`
echo "上一條命令的執行結果:"$?

#執行一條合法語句,正常運行完畢,返回0
str=`echo "hello world"`
echo "上一條命令的執行結果:"$?

  執行腳本:

ubuntu@ubuntu:~$ ./test.sh a b c d e f g
進程名:./test.sh
位置參數的數量:7
所有位置參數的內容:a b c d e f g
./test.sh: line 8: hello: command not found
上一條命令的執行結果:127
上一條命令的執行結果:0
ubuntu@ubuntu:~$ 

  

數組

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM