CentOS shell中的變數
shell中的變數
變數的介紹
name=wsh age=22
如何使用變數
變數名 賦值符號 變數值 name=wsh //shell中定義變數 name:wsh //yaml中定義的變數
定義變數的語法
定義變數名的規範
1.變數名只能是字母、字母、數字或下劃線的任意組合(區分大小寫) 2.變數名不可以使用中文 3.變數名不可以使用命令來命名 4.不要用拼音 5.變數名不能以數字開頭
1.下劃線+純小寫 name_of_wsh='wushihang' name_of_oldboy='laonanhai' 2.駝峰體 nameOfWsh='wushihang' nameOfOldboy='laonanhai' ageOfOldboy=88 3.下劃線+純大寫 NAME_OF_OLDBOY='laonanhai' 不好的方式: 1.變數名為中文、拼音 2.變數名過長 3.變數名詞不達意
變數的分類
系統內建環境變數
## 檢視系統環境變數 env declare export ## 環境變數 LANG ## 字符集語言 PATH ## 該變數中路徑裡的所有可執行檔案,都可以直接執行,不需要加路徑 PS1 ## 命令提示符 UID ## 當前登入使用者的uid HOSTNAME ## 當前主機 PWD ## 當前工作路徑 USER ## 當前登入的使用者名稱 ## 歷史記錄相關 HISTSIZE HISTFILESIZE HISTFILE TMOUT HISTCONTROL: export HISTCONTROL=ignorespace # 離職專用變數(強制歷史記錄不記住該命令) PROMPT_COMMAND
普通變數
DATE=$(date +%F-%T) IP=$(ifconfig eth0|awk 'NR==2{print $2}') mkdir $DATE_$IP_$HOSTNAME ## 基本涼了 ### 注意使用大括號分隔變數 mkdir ${DATE}_${IP}_${HOSTNAME}
位置變數
$n: N正整數,$1 $2 $3....$n 兩位數要使用{}, ${10} ${11} $0: 執行指令碼的路徑和名字 $#: 傳遞引數的個數 $*: 1.不適合陣列使用 2.呼叫時加雙引號 ## 接收指令碼後面所有的引數 $@: 1.適合後面陣列資料型別使用 2.呼叫時加雙引號 ## 接收指令碼後面所有的引數
特殊變數(狀態)
$?:表示上一個命令執行的狀態(上一條命令的返回值) 0,成功執行 非0,失敗 特殊命令: - false - diff $$:表示當前指令碼執行的pid $!:上一個指令碼或程式執行的pid $_:獲取上一條命令的最後一個引數(以空格為分隔符) ## 相當於 Esc + .
變數的子串
${#變數名}:獲取該變數的長度 [root@web01 ~]# vim a.sh #!bin/bash name=wsh echo ${#name} [root@web01 ~]# . a.sh 3 [root@web01 ~]# vim a.sh #!bin/bash name=$1 echo ${#name} [root@web01 ~]# . a.sh 123456 6 [root@web01 ~]# vim a.sh #!bin/bash read -p '請輸入使用者名稱:' name read -p '請輸入密碼:' pas if [ ${#pas} -lt 8 ];then echo '密碼必須大於等於八位' else echo '密碼符合要求' fi [root@web01 ~]# . a.sh 請輸入使用者名稱:www 請輸入密碼:111 密碼必須大於等於八位 [root@web01 ~]# . a.sh 請輸入使用者名稱:www 請輸入密碼:12345678 密碼符合要求 ${變數名}:呼叫變數 ${變數名:偏移量}:字串的擷取 [root@web01 ~]# vim a.sh #!bin/bash name=wsh echo ${name:1} [root@web01 ~]# . a.sh sh ${變數名:偏移量:步長}:字串的擷取 [root@web01 ~]# vim a.sh #!bin/bash name=wsh_blog51CTO echo ${name:3:5} [root@web01 ~]# . a.sh _blog ${變數名#字串}:從變數開頭,刪除最短匹配word的子串 ${變數名##字串}:從變數開頭,刪除最長匹配word的子串 [root@web01 ~]# vim a.sh #!bin/bash name=/tmp/abc/1.txt echo ${name#*/} echo ${name##*/} [root@web01 ~]# . a.sh tmp/abc/1.txt 1.txt [root@web01 ~]# vim 1.txt /tmp/abc/1.txt /root/2.txt /usr/local/src/3.txt [root@web01 ~]# vim a.sh #!bin/bash for line in `cat 1.txt`;do echo ${line##*/} done [root@web01 ~]# . a.sh 1.txt 2.txt 3.txt ${變數名%字串}:從變數結尾,刪除最短匹配word的子串 ${變數名%%字串}:從變數結尾,刪除最長匹配word的子串 #!bin/bash for line in `cat 1.txt`;do echo ${line%%/*} echo ${line%/*} done [root@web01 ~]# . a.sh /tmp/abc /root /usr/local/src ${變數名/匹配內容/替換內容}:使用string替換第一個pattern [root@web01 ~]# vim a.sh #!bin/bash read -p '請輸入使用者名稱:' name echo ${name/ww/wsh} [root@web01 ~]# . a.sh 請輸入使用者名稱:ww_fff_ggg_ww wsh_fff_ggg_ww ${變數名//匹配內容/替換內容}:使用string替換所有pattern [root@web01 ~]# vim a.sh #!bin/bash read -p '請輸入使用者名稱:' name echo ${name//ww/wsh} [root@web01 ~]# . a.sh 請輸入使用者名稱:ww_ff_ww_gg wsh_ff_wsh_gg
擴充套件變數
${變數名:-字串}:如果parameter沒被賦值或其值為空,就以string作為預設值,它不會賦值給變數 [root@web01 ~]# echo $gender [root@web01 ~]# echo ${gender:-male} male [root@web01 ~]# gender=female [root@web01 ~]# echo $gender female [root@web01 ~]# echo ${gender:-male} female ${變數名:=字串}:如果parameter沒被賦值或其值為空,就以string作為預設值,它會賦值給變數(使用者沒有傳遞值) [root@web01 ~]# echo $gender [root@web01 ~]# echo ${gender:=male} male [root@web01 ~]# gender=female [root@web01 ~]# echo $gender female [root@web01 ~]# echo ${gender:=male} female ${變數名:?報錯資訊}:如果parameter沒被賦值或其值為空,就以?後面的字串作為報錯輸出 [root@web01 ~]# unset gender [root@web01 ~]# echo ${gender:?male} -bash: gender: male ${變數名:+字串}:如果parameter沒被賦值或其值為空,就什麼都不做,否則用string替換變數內容 [root@web01 ~]# gender=female [root@web01 ~]# echo ${gender:+wsh} wsh
變數的賦值方式
直接賦值: name=wsh 間接賦值:將一個命令執行的結果賦值給一個變數,IP=`ifconfig eth0|awk 'NR==2{print $2}'` 互動賦值:read -p '請輸入xxx' 變數名 傳參賦值:執行指令碼的時候,將需要傳遞的變數值,寫在指令碼的後面 $1 $2 $3
互動賦值
read: read 選項 變數名 read 選項 -p '一句話' 變數名 ## 選項 -p:列印一句話 -s:不顯示輸入內容 -t:設定超時時間 -a:將後面的結果放入陣列 [root@web01 ~]# vim a.sh #!bin/bash passwd=123 read -p 'm01 login:' name read -s -p 'password:' pass if [ $pass == $passwd ];then echo '登入成功' else echo '密碼錯誤' fi [root@web01 ~]# . a.sh m01 login:www password:密碼錯誤 [root@web01 ~]# . a.sh m01 login:www password:登入成功 [root@web01 ~]# vim a.sh #!bin/bash passwd=123 read -p 'm01 login:' -a name read -t 5 -s -p 'password:' pass if [ $pass == $passwd ];then echo '登入成功' echo $name else echo '密碼錯誤' fi [root@web01 ~]# . a.sh m01 login:www password:-bash: [: ==: unary operator expected [root@web01 ~]# . a.sh m01 login:www wsg ww rrr password:登入成功 www
shell中的資料型別
## 字串型別 賦值: name='字串' 取值: $name ## 整型 age=18 ## 陣列型別 賦值: list=(python java golang shell) list[0]='abc' list[1]='efg' list[2]='hij' list[3]='xyz' 取值: ${list[0]} ${list[1]} ${list[2]} ${list[3]} list=(python java golang shell) echo $list echo ${list[1]} echo ${list[2]} echo ${list[3]} ------------------- list[0]='abc' list[1]='efg' list[2]='hij' list[3]='xyz' list=(python java golang shell) echo $list echo ${list[1]} echo ${list[2]} echo ${list[3]} -------------------------- list=(python java golang shell) list[0]='abc' list[1]='efg' list[2]='hij' list[3]='xyz' echo $list ${list[1]} ${list[2]} ${list[3]} ----------迴圈陣列------------------ [root@web01 ~]# vim a.sh #!bin/bash list=(python java golang shell) for yuansu in ${#list[*]};do echo $yuansu done [root@web01 ~]# . a.sh 4 echo ${#list[*]} // 陣列中元素的個數
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2908253/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [Shell] shell中的內部變數變數
- shell中變數的取值與賦值變數賦值
- 4、在Shell程式中的使用變數變數
- Shell 變數變數
- Shell變數變數
- shell指令碼中的變數及應用指令碼變數
- shell中特殊變數$0 $1 $# $$ $! $?的涵義變數
- shell中變數$#,$@,$0,$1,$2的含義變數
- Shell程式設計-04-Shell中變數數值計算程式設計變數
- 常用的shell變數用法變數
- SHELL的系統變數變數
- shell程式設計學習筆記(二):Shell中變數的使用程式設計筆記變數
- Linux中bash shell環境變數Linux變數
- Shell--變數變數
- shell Bash變數變數
- (2) Shell 變數變數
- shell特定變數和Makefile中自動化變數的對比記憶變數
- Shell入門——shell特性、變數變數
- Shell程式設計-shell變數2-位置變數和預定義變數程式設計變數
- Linux shell程式設計(一)shell指令碼中的變數詳解Linux程式設計指令碼變數
- Shell階段02 shell變數運算(整數運算/小數運算), shell變數案例變數
- linux_shell awk中傳遞變數Linux變數
- shell 擷取變數的字串變數字串
- Shell程式設計-shell變數1程式設計變數
- shell基礎篇(二)-shell變數變數
- 2.Shell變數變數
- Shell 變數學習變數
- Linux Shell變數Linux變數
- [shell基礎]——變數變數
- awk引用shell變數變數
- awk使用shell變數變數
- [轉]Shell向Perl指令碼中傳遞變數的方法指令碼變數
- Shell程式設計-02-Shell變數程式設計變數
- Shell變數的作用域問題變數
- Shell學習【變數使用】變數
- Shell配置環境變數變數
- Linux之shell變數Linux變數
- linux基礎——shell變數(本地變數和環境變數)Linux變數