基礎(chǔ)知識(shí):
張北ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!變量: 變量名+指向的內(nèi)存空間; 變量賦值: var_name=value; 變量類型: 數(shù)據(jù)存儲(chǔ)的格式,表示的數(shù)據(jù)范圍; 字符型,數(shù)字型,布爾型; C語(yǔ)音是強(qiáng)變量類型(使用前必須聲明類型,類型聲明后不能改變);bash是弱變量類型(無(wú)需事先聲明, 類型隨需求改變); bash默認(rèn)變量類型為字符型; 要進(jìn)行算術(shù)運(yùn)算,需要聲明為數(shù)字型: declare -i var_name 變量引用: ${var_name} $var_name
算術(shù)運(yùn)算:
let VAR=expression; VAR= $[expression]; VAR= $((expression)); VAR= $(expr argu1 argu2 argu3 ) 注意:有些時(shí)候乘法符號(hào)需要用轉(zhuǎn)義字符; 增強(qiáng)型賦值: += ,-= , *=, %= 變量做某種運(yùn)算后回存到此變量中 let i=$i+n ---> let i+=n --->這個(gè)let的變量不用出現(xiàn)$ let i+=1 ---> let i++ let i-=i ---> let i--
條件測(cè)試:
(1)執(zhí)行命令,并利用命令返回狀態(tài)判斷, $? 0: 成功 ,1~255失敗 腳本的狀態(tài)返回值:默認(rèn)是返回最后一條命名的狀態(tài)返回值 自定義退出狀態(tài)碼:exit [n]: n為指定的狀態(tài)碼 (2)測(cè)試表達(dá)式 test expression [ expression ] ----注意expression兩邊必須有空白字符 [[ expression ]] 數(shù)值測(cè)試: -eq: 是否等于 [ $sum1 -eq $sum2 ] -ne: 是否不等于 -gt: 是否打于 -ge: 是否大于等于 -lt: 是否小于 -le: 是否小于等于 字符測(cè)試: ==: 等于 >: 大于 <: 小于 != 不等于 注意: a.字符串要加雙引號(hào); b.字符串測(cè)試要是有[[ ]]; =~ : 左側(cè)字符串是否能夠被右側(cè)的PATTERN所匹配; -z “string”: 判斷指定的字符串是否為空,空為真; -n “string”: 判斷指定的字符串是否為空,非空為真; 文件測(cè)試 存在性測(cè)試: -a FILE 存在為真 -e FILE 存在為真 存在性及類型測(cè)試: -b FILE 塊文件 -c FILE 字符文件 -d FILE 目錄 -f FILE 普通文件 -h FILE 符合鏈接文件 -P FILE 管道文件(大寫(xiě)P) -S FILE 套接字文件(大寫(xiě)S) 文件權(quán)限性測(cè)試 -r FILE ; -w FILE ;-x FILE ; -U FILE (suid權(quán)限) ; -g FILE(sgid權(quán)限); -K FILE(sticky權(quán)限) 文件是否有內(nèi)容 -s FILE 時(shí)間戳 -N FILE 文件自上一次讀后是否被修改過(guò); 從屬關(guān)系 -O 當(dāng)前用戶是否文件的屬主 -G 當(dāng)前用戶是否文件的屬組 雙目測(cè)試 FILE1 -ef FILE2 是否指向相同inode的硬連接 FILE1 -nt FILE2 FILE1是否新于FILE2 FILE1 -ot FILE2 FILE1是否舊于FILE2 組合測(cè)試條件 邏輯運(yùn)算 (1) COMMAND1 && COMMAND2 可以這樣來(lái)使用:相當(dāng)于if command1 is true then command2, 因?yàn)橄扰袛郼ommand1,ture才會(huì)執(zhí)行command2 COMMAND1 || COMMAND2 可以這樣來(lái)使用:相當(dāng)于else,因?yàn)橄扰袛郼ommand1,command1是ture的話,就不執(zhí)行command2了 COMMAND1 ! COMMAND2 (2) EXPRESSION1 -a EXPRESSION2 EXPRESSION1 -0 EXPRESSION2 !EXPRESSION2 注意: 邏輯運(yùn)算符前后都有空白字符 邏輯運(yùn)算優(yōu)先級(jí)別 !> -a > -o, 改變級(jí)別用括號(hào),括號(hào)要用轉(zhuǎn)義字符,前后留空
示例:
logic_script.sh #!/bin/bash # file=/tmp/logic_script.sh [ 6 -lt 7 ] && echo "1" || echo "0" [ "is a good day" =~ "day" ] && echo "1" || echo "0" [ -a $file] && echo "1" || echo "0" [root@localhost tmp]# bash -x logic_script.sh + file=/tmp/logic_scritp.sh ---看||的邏輯,前面為真,后面就不執(zhí)行了 + '[' 6 -lt 7 ']' + echo 1 1 + '[' isagoodday '=~' day ']' logic_script.sh: line 6: [: =~: binary operator expected ---字符串比較要兩個(gè)中括號(hào)[[]] + echo 0 + '[' -a '/tmp/logic_scritp.sh]' logic_script.sh: line 7: [: missing `]' ---看錯(cuò)誤提示,]沒(méi)有空格隔開(kāi),變?yōu)閙issing `]' + echo 0 修改后: logic_script.sh #!/bin/bash # file=/tmp/logic_script.sh [ 6 -lt 7 ] && echo "1" || echo "0" [[ "isagoodday" =~ "day" ]] && echo "1" || echo "0" [ -a $file ] && echo "1" || echo "0" [root@localhost tmp]# bash -x logic_script.sh + file=/tmp/logic_script.sh + '[' 6 -lt 7 ']' + echo 1 1 + [[ isagoodday =~ day ]] + echo 1 1 + '[' -a /tmp/logic_script.sh ']' + echo 1 1
變量作用域
環(huán)境變量: 當(dāng)前shell進(jìn)行及子進(jìn)程有效 賦值: (1)export var_name=value (2)var_name= value export var_name (3)declare -x var_name=value (4)var_name=value delare -x var_name 注意: bash內(nèi)嵌了許多環(huán)境變量(通常全為大寫(xiě)字母) 查看: export , declare -x , env 本地變量: 當(dāng)前運(yùn)行腳本的shell進(jìn)行的生命周期,對(duì)子shell無(wú)效 賦值: var_name=value 引用: ${var_name} , $var_name 查看: set 撤銷(xiāo): unset var_name(此處不能用$) 局部變量: 某代碼的片段,如函數(shù)的上下文,作用在函數(shù)的生命周期,函數(shù)結(jié)束就銷(xiāo)毀; 賦值: local var_name=vaule 位置參數(shù)變量:當(dāng)前執(zhí)行腳本的shell進(jìn)程傳遞的參數(shù) 使用方式:myscript argue1 argu2 argu3 ... --->執(zhí)行腳本時(shí)直接賦值給參數(shù) 引用方式:$1 , $2 ,$3,... 輪替: shift n 把后面第n個(gè)參數(shù)輪替到第一個(gè)參數(shù),n前面的參數(shù)都踢掉 特殊變量: $0: 腳本文件名; $#: 腳本參數(shù)的個(gè)數(shù) $*: 所有參數(shù) $@: 所有參數(shù) --假設(shè)在腳本運(yùn)行時(shí)寫(xiě)了三個(gè)參數(shù) 1、2、3 " * " 等價(jià)于 "1 2 3"(傳遞了一個(gè)參數(shù)), "@" 等價(jià)于 "1" "2" "3"(傳遞了三個(gè)參數(shù)) $$: 腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào); $!: 后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào)
例子: sum_scirp.sh #!/bin/bash # declare -i sum echo "the script filename is: $0" echo "the script argu is : $*" echo "the script argu's number is : $#" shift 2 ---- 前連個(gè)參數(shù)被踢了 echo "the script argu is : $*" echo "the script argu's number is : $#" for ((i=1;i<=$#;i++));do ----仿C語(yǔ)言風(fēng)格的for循環(huán),需要兩個(gè)括號(hào) let sum+=$i; ----$i,i循環(huán)的值,怎樣取傳遞參數(shù)的值$($i)? done echo "the sum is $sum" [root@localhost tmp]# bash sum_script.sh 1 2 13 14 15 16 17 18 9 the script argu is : 1 2 13 14 15 16 17 18 9 the script argu's number is : 9 the script argu is : 13 14 15 16 17 18 9 ---- shift 2 的效果 the script argu's number is : 7 the sum is 28 ---- 28=1+2+3+4+5+6+7 ,這個(gè)$i不是取傳遞參數(shù)的值! 修改for語(yǔ)句 for i in $*;do echo "$i" let sum+=$i ---- 這個(gè)$i是列表里的數(shù)據(jù),! done [root@localhost tmp]# bash sum_script.sh 1 2 13 14 15 16 17 18 9 the script argu is : 1 2 13 14 15 16 17 18 9 the script argu's number is : 9 the script argu is : 13 14 15 16 17 18 9 the script argu's number is : 7 13 14 15 16 17 18 9 the sum is 102
本文標(biāo)題:bash基礎(chǔ)-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://aaarwkj.com/article30/dohhso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站制作、虛擬主機(jī)、Google、響應(yīng)式網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容