shell編程基礎(三)——shell變量

1、變量的定義(常見3種方式)
   變量名必須以字母或下劃線開頭,其他字符是字母、數字或下劃線
    linux命令是區分大小寫的,因此變量名也區分大小寫
1)直接賦值
    var=value  =先後無空格
    由於命令行中命令名、選項、參數默認是空白符(單個,多個空格或單個,多個tab製表符)分隔的,
    若是=先後有空格,var = value會被認爲是命令,shell執行時會報錯:-bash: var: command not foundlinux

2)read讀取
   read var   經過鍵盤輸入。通常使用 read -p "提示信息" var
   read var < filename 文件輸入重定向。通常用於while循環讀取文件內容shell

3)變量替換或命令替換
   變量替換 var=${other_var}  此處是定義變量var,other_var是被引用,引用變量需使用$,爲加強可讀性變量名使用{}括起
   命令替換 var=$(command) 或 var=`command`   使用$()或反引號括住須要執行的命令bash

注:變量定義通常使用雙引號括住變量值,如var="value",查看自定義變量set,取消變量unset var_name編輯器

2、變量的引用
    要使用一個變量的值,只需在變量名前面加一個$,如echo "$var"
    爲加強可讀性,再使用{}括住變量,如echo "${var}"測試

3、特殊變量(位置變量)
$0  當前運行程序的名稱
$n  n爲從1開始,$1是第一個參數,$2是第二個參數…以此類推。第10個及其之後變量使用${10},${11}... 
$#  傳入腳本的參數的個數
$?  上一個命令的返回值,若是上一個命令成功執行則$?的值爲0,不然爲其餘非零值
$$  當前進程的pid
$!  後臺運行的最後一個進程的pid
$*  全部的位置參數(總體做爲單個字符串)
$@  全部的位置參數(每一個做爲獨立字符串)命令行

4、使用變量的常見形式
1)獲取變量值的長度,${#variable_name}
2)截取變量值:
       ${variable_name:start_index},返回值從start_index開始到值末尾,變量值的index從0開始
       ${variable_name:start_index:length},返回值從start_index開始,返回值長度爲length
       ${var#key}:從前日後刪除符合key最短的那一個
       ${var##key}:從前日後刪除符合key最長的那一個
       ${var%key}:從後往前刪除符合key最短的那一個
       ${var%%key}:從後往前刪除符合key最長的那一個
3)替換變量值
       ${var/舊字符串/新字符串}:替換第一個知足條件的字符串
       ${var//舊字符串/新字符串}:替換全部知足條件的字符串
4)腳本中設置環境變量
   環境變量會在當前進程及其子進程中使用。子進程能夠獲取父進程的環境變量,但不會獲取自定義變量。子進程不能修改父進程環境變量。
   export var=value
   或
   var=value
   export var
 
  注:查看環境變量使用env
5)其餘
   ${var:-word} 若var存在且非空,則返回var的值,不然返回word。
   用途:若變量未定義,則返回默認值
[root@mrhcatxq01 shell]# echo ${a:-bbb}
bbb
[root@mrhcatxq01 shell]# echo ${a}進程

[root@mrhcatxq01 shell]#
   ${var:=word} 若var存在且非空,則返回var的值,不然將其設值爲word,而後返回其值
   用途:若變量未定義,則設置變量爲默認值
[root@mrhcatxq01 shell]# echo ${a:=ccc}
ccc
[root@mrhcatxq01 shell]# echo ${a}
ccc
[root@mrhcatxq01 shell]#
   ${var:?message} 若var存在且非空,返回var的值;不然打印message,並退出當前腳本。若message省略,shell返回parameter null or not set
   用途:用於捕捉因變量未定義而致使的錯誤
[root@mrhcatxq01 shell]# echo ${b:?"hhhhhh"}
-bash: b: hhhhhh
   ${var:+word} 若var存在且非空,則返回word,不然返回null
   用途:測試變量存在
[root@mrhcatxq01 shell]# b=aaa
[root@mrhcatxq01 shell]# echo ${b:+11}
11
[root@mrhcatxq01 shell]# echo ${c:+nnnnn}字符串

[root@mrhcatxq01 shell]#qt

5、常見的環境變量
   PATH  命令搜索路徑,各個路徑冒號分隔
   [root@mrhcatxq01 shell]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
   HOME  用戶家目錄路徑名
   EDITOR 默認編輯器
   IFS   定義shell使用的分隔符
   LOGNAME 用戶登陸名
   SHELL  shell路徑名
   PS1    主命令提示符,即登陸系統命令行前的提示符,如:[root@mrhcatxq01 shell]#
   PS2    二級命令提示符,命令未輸入完,提示繼續輸入命令的提示符,如:
   [root@mrhcatxq01 shell]# ls -\
   >
   PS4    調式命令提示符。使用set -x調式腳本時的提示符:
   [root@mrhcatxq01 shell]# cat echo.sh
#!/bin/bash登錄

set -x echo "hello" [root@mrhcatxq01 shell]# ./echo.sh + echo hello hello [root@mrhcatxq01 shell]#

相關文章
相關標籤/搜索