亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 291
粉絲 0
評論 0
訪問量 450253
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
CentOS shell中的變量
原創(chuàng)
1093人瀏覽過

鏡像下載、域名解析、時間同步請點擊 阿里云開源鏡像站

shell中的變量

變量的介紹

變量即變化的量,核心是”變“與”量“二字,變即變化,量即衡量狀態(tài)。

量:是記錄現實世界當中的某種狀態(tài)<br>變:指的是記錄的狀態(tài)是可以發(fā)送變化的

  1. name=wsh
  2. age=22

如何使用變量

  1. 變量名 賦值符號 變量值
  2. name=wsh //shell中定義變量
  3. name:wsh //yaml中定義的變量

定義變量的語法

  • 變量名

相當于一個門牌號,便于取出變量值,是訪問到值的唯一方式

  • 賦值符號

將值的內存地址,綁定給變量名

  • 變量值

用來表示狀態(tài)

變量的使用規(guī)則:先定義,再通過變量名去引用

定義變量名的規(guī)范

變量名的命名規(guī)則

1.大前提:變量名的命名應該能夠反映出值記錄的狀態(tài)<br>2.變量是用來訪問變量值的,所以變量名應該遵循一定規(guī)范,來方便我們標識存到內存中值的功能

  1. 1.變量名只能是字母、字母、數字或下劃線的任意組合(區(qū)分大小寫)
  2. 2.變量名不可以使用中文
  3. 3.變量名不可以使用命令來命名
  4. 4.不要用拼音
  5. 5.變量名不能以數字開頭

變量名定義的方式

  1. 1.下劃線+純小寫
  2. name_of_wsh='wushihang'
  3. name_of_oldboy='laonanhai'
  4. 2.駝峰體
  5. nameOfWsh='wushihang'
  6. nameOfOldboy='laonanhai'
  7. ageOfOldboy=88
  8. 3.下劃線+純大寫
  9. NAME_OF_OLDBOY='laonanhai'
  10. 不好的方式:
  11. 1.變量名為中文、拼音
  12. 2.變量名過長
  13. 3.變量名詞不達意

變量的分類

系統(tǒng)內置環(huán)境變量

  1. ## 查看系統(tǒng)環(huán)境變量
  2. env
  3. declare
  4. export
  5. ## 環(huán)境變量
  6. LANG ## 字符集語言
  7. PATH ## 該變量中路徑里的所有可執(zhí)行文件,都可以直接執(zhí)行,不需要加路徑
  8. PS1 ## 命令提示符
  9. UID ## 當前登錄用戶的uid
  10. HOSTNAME ## 當前主機
  11. PWD ## 當前工作路徑
  12. USER ## 當前登錄的用戶名
  13. ## 歷史記錄相關
  14. HISTSIZE
  15. HISTFILESIZE
  16. HISTFILE
  17. TMOUT
  18. HISTCONTROL: export HISTCONTROL=ignorespace # 離職專用變量(強制歷史記錄不記住該命令)
  19. PROMPT_COMMAND

普通變量

  1. DATE=$(date +%F-%T)
  2. IP=$(ifconfig eth0|awk 'NR==2{print $2}')
  3. mkdir $DATE_$IP_$HOSTNAME ## 基本涼了
  4. ### 注意使用大括號分隔變量
  5. mkdir ${DATE}_${IP}_${HOSTNAME}

位置變量

  1. $n: N正整數,$1 $2 $3....$n 兩位數要使用{}, ${10} ${11}
  2. $0: 執(zhí)行腳本的路徑和名字
  3. $#: 傳遞參數的個數
  4. $*: 1.不適合數組使用 2.調用時加雙引號 ## 接收腳本后面所有的參數
  5. $@: 1.適合后面數組數據類型使用 2.調用時加雙引號 ## 接收腳本后面所有的參數

特殊變量(狀態(tài))

  1. $?:表示上一個命令執(zhí)行的狀態(tài)(上一條命令的返回值) 0,成功執(zhí)行 0,失敗
  2. 特殊命令:
  3. - false
  4. - diff
  5. $$:表示當前腳本執(zhí)行的pid
  6. $!:上一個腳本或程序運行的pid
  7. $_:獲取上一條命令的最后一個參數(以空格為分隔符) ## 相當于 Esc + .

變量的子串

  1. ${#變量名}:獲取該變量的長度
  2. [root@web01 ~]# vim a.sh
  3. #!bin/bash
  4. name=wsh
  5. echo ${#name}
  6. [root@web01 ~]# . a.sh
  7. 3
  8. [root@web01 ~]# vim a.sh
  9. #!bin/bash
  10. name=$1
  11. echo ${#name}
  12. [root@web01 ~]# . a.sh 123456
  13. 6
  14. [root@web01 ~]# vim a.sh
  15. #!bin/bash
  16. read -p '請輸入用戶名:' name
  17. read -p '請輸入密碼:' pas
  18. if [ ${#pas} -lt 8 ];then
  19. echo '密碼必須大于等于八位'
  20. else
  21. echo '密碼符合要求'
  22. fi
  23. [root@web01 ~]# . a.sh
  24. 請輸入用戶名:www
  25. 請輸入密碼:111
  26. 密碼必須大于等于八位
  27. [root@web01 ~]# . a.sh
  28. 請輸入用戶名:www
  29. 請輸入密碼:12345678
  30. 密碼符合要求
  31. ${變量名}:調用變量
  32. ${變量名:偏移量}:字符串的截取
  33. [root@web01 ~]# vim a.sh
  34. #!bin/bash
  35. name=wsh
  36. echo ${name:1}
  37. [root@web01 ~]# . a.sh
  38. sh
  39. ${變量名:偏移量:步長}:字符串的截取
  40. [root@web01 ~]# vim a.sh
  41. #!bin/bash
  42. name=wsh_blog51CTO
  43. echo ${name:3:5}
  44. [root@web01 ~]# . a.sh
  45. _blog
  46. ${變量名#字符串}:從變量開頭,刪除最短匹配word的子串
  47. ${變量名##字符串}:從變量開頭,刪除最長匹配word的子串
  48. [root@web01 ~]# vim a.sh
  49. #!bin/bash
  50. name=/tmp/abc/1.txt
  51. echo ${name#*/}
  52. echo ${name##*/}
  53. [root@web01 ~]# . a.sh
  54. tmp/abc/1.txt
  55. 1.txt
  56. [root@web01 ~]# vim 1.txt
  57. /tmp/abc/1.txt
  58. /root/2.txt
  59. /usr/local/src/3.txt
  60. [root@web01 ~]# vim a.sh
  61. #!bin/bash
  62. for line in `cat 1.txt`;do
  63. echo ${line##*/}
  64. done
  65. [root@web01 ~]# . a.sh
  66. 1.txt
  67. 2.txt
  68. 3.txt
  69. ${變量名%字符串}:從變量結尾,刪除最短匹配word的子串
  70. ${變量名%%字符串}:從變量結尾,刪除最長匹配word的子串
  71. #!bin/bash
  72. for line in `cat 1.txt`;do
  73. echo ${line%%/*}
  74. echo ${line%/*}
  75. done
  76. [root@web01 ~]# . a.sh
  77. /tmp/abc
  78. /root
  79. /usr/local/src
  80. ${變量名/匹配內容/替換內容}:使用string替換第一個pattern
  81. [root@web01 ~]# vim a.sh
  82. #!bin/bash
  83. read -p '請輸入用戶名:' name
  84. echo ${name/ww/wsh}
  85. [root@web01 ~]# . a.sh
  86. 請輸入用戶名:ww_fff_ggg_ww
  87. wsh_fff_ggg_ww
  88. ${變量名//匹配內容/替換內容}:使用string替換所有pattern
  89. [root@web01 ~]# vim a.sh
  90. #!bin/bash
  91. read -p '請輸入用戶名:' name
  92. echo ${name//ww/wsh}
  93. [root@web01 ~]# . a.sh
  94. 請輸入用戶名:ww_ff_ww_gg
  95. wsh_ff_wsh_gg

擴展變量

給變量默認值

  1. ${變量名:-字符串}:如果parameter沒被賦值或其值為空,就以string作為默認值,它不會賦值給變量
  2. [root@web01 ~]# echo $gender
  3. [root@web01 ~]# echo ${gender:-male}
  4. male
  5. [root@web01 ~]# gender=female
  6. [root@web01 ~]# echo $gender
  7. female
  8. [root@web01 ~]# echo ${gender:-male}
  9. female
  10. ${變量名:=字符串}:如果parameter沒被賦值或其值為空,就以string作為默認值,它會賦值給變量(用戶沒有傳遞值)
  11. [root@web01 ~]# echo $gender
  12. [root@web01 ~]# echo ${gender:=male}
  13. male
  14. [root@web01 ~]# gender=female
  15. [root@web01 ~]# echo $gender
  16. female
  17. [root@web01 ~]# echo ${gender:=male}
  18. female
  19. ${變量名:?報錯信息}:如果parameter沒被賦值或其值為空,就以?后面的字符串作為報錯輸出
  20. [root@web01 ~]# unset gender
  21. [root@web01 ~]# echo ${gender:?male}
  22. -bash: gender: male
  23. ${變量名:+字符串}:如果parameter沒被賦值或其值為空,就什么都不做,否則用string替換變量內容
  24. [root@web01 ~]# gender=female
  25. [root@web01 ~]# echo ${gender:+wsh}
  26. wsh

變量的賦值方式

  1. 直接賦值: name=wsh
  2. 間接賦值:將一個命令執(zhí)行的結果賦值給一個變量,IP=`ifconfig eth0|awk 'NR==2{print $2}'`
  3. 交互賦值:read -p '請輸入xxx' 變量名
  4. 傳參賦值:執(zhí)行腳本的時候,將需要傳遞的變量值,寫在腳本的后面 $1 $2 $3

交互賦值

  1. read:
  2. read 選項 變量名
  3. read 選項 -p '一句話' 變量名
  4. ## 選項
  5. -p:打印一句話
  6. -s:不顯示輸入內容
  7. -t:設置超時時間
  8. -a:將后面的結果放入數組
  9. [root@web01 ~]# vim a.sh
  10. #!bin/bash
  11. passwd=123
  12. read -p 'm01 login:' name
  13. read -s -p 'password:' pass
  14. if [ $pass == $passwd ];then
  15. echo '登錄成功'
  16. else
  17. echo '密碼錯誤'
  18. fi
  19. [root@web01 ~]# . a.sh
  20. m01 login:www
  21. password:密碼錯誤
  22. [root@web01 ~]# . a.sh
  23. m01 login:www
  24. password:登錄成功
  25. [root@web01 ~]# vim a.sh
  26. #!bin/bash
  27. passwd=123
  28. read -p 'm01 login:' -a name
  29. read -t 5 -s -p 'password:' pass
  30. if [ $pass == $passwd ];then
  31. echo '登錄成功'
  32. echo $name
  33. else
  34. echo '密碼錯誤'
  35. fi
  36. [root@web01 ~]# . a.sh
  37. m01 login:www
  38. password:-bash: [: ==: unary operator expected
  39. [root@web01 ~]# . a.sh
  40. m01 login:www wsg ww rrr
  41. password:登錄成功
  42. www

shell中的數據類型

  1. ## 字符串類型
  2. 賦值:
  3. name='字符串'
  4. 取值:
  5. $name
  6. ## 整型
  7. age=18
  8. ## 數組類型
  9. 賦值:
  10. list=(python java golang shell)
  11. list[0]='abc'
  12. list[1]='efg'
  13. list[2]='hij'
  14. list[3]='xyz'
  15. 取值:
  16. ${list[0]}
  17. ${list[1]}
  18. ${list[2]}
  19. ${list[3]}
  20. list=(python java golang shell)
  21. echo $list
  22. echo ${list[1]}
  23. echo ${list[2]}
  24. echo ${list[3]}
  25. -------------------
  26. list[0]='abc'
  27. list[1]='efg'
  28. list[2]='hij'
  29. list[3]='xyz'
  30. list=(python java golang shell)
  31. echo $list
  32. echo ${list[1]}
  33. echo ${list[2]}
  34. echo ${list[3]}
  35. --------------------------
  36. list=(python java golang shell)
  37. list[0]='abc'
  38. list[1]='efg'
  39. list[2]='hij'
  40. list[3]='xyz'
  41. echo $list ${list[1]} ${list[2]} ${list[3]}
  42. ----------循環(huán)數組------------------
  43. [root@web01 ~]# vim a.sh
  44. #!bin/bash
  45. list=(python java golang shell)
  46. for yuansu in ${#list[*]};do
  47. echo $yuansu
  48. done
  49. [root@web01 ~]# . a.sh
  50. 4
  51. echo ${#list[*]} // 數組中元素的個數

本文轉自:https://blog.51cto.com/baicia/5516898

本博文版權歸博主所有,轉載請注明地址!如有侵權、違法,請聯系admin@php.cn舉報處理!
全部評論 文明上網理性發(fā)言,請遵守新聞評論服務協(xié)議
0條評論
作者最新博文
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網:公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網訂閱號
每天精選資源文章推送
PHP中文網APP
隨時隨地碎片化學習
PHP中文網抖音號
發(fā)現有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號

  • 登錄PHP中文網,和優(yōu)秀的人一起學習!
    全站2000+教程免費學