例1git
#!/bin/bash #格式規定的第一句話,這行代碼的!後代表了腳本要用Bash shell執行 #分開寫兩行代碼,腳本會一次執行 date #顯示當前時間 who #顯示登錄帳戶
chmod u+x test.sh #賦予腳本執行權限
./test.sh # ./的意思是當前目錄
例2github
#!/bin/bash #echo "文本" 則文本會在命令行中顯示,注意使用雙引號能夠避免不少麻煩 echo -n "當前時間:" #使用 -n 命令可使date的結果和當前時間處在同一行 date echo " 在線用戶" # 普通的echo ,在線用戶本身獨佔一行 who
在腳本中出現$,就意味着這是個變量,如$val1,反過來要表示美圓的話要加上轉義符號 $15 即爲15美圓shell
用戶能夠本身定義變量,但有兩點注意:安全
用戶變量能夠經過美圓符號引用bash
var1=10 #不能有空格 var2=$var1 #用$符號引用
testing=$(date) #時間信息賦值給了testing
#常見用法,將日期加入文件名 #!/bin/bash today=$(date +%y%m%d) #提取時間信息中的年(y)月(m)日(d) mv test* test*.$today
date > text #將日期信息保存在text文件中
date>>text #將日期【添加】到text文件中
var5=$(bc << EOF #bc,shell的計算器,這段代碼計算了var1*var2+var3+var4的值,並取四位小數 scale = 4 a1 = ( $var1 * $var2 ) b1 = ($var3 * $var4 ) a1+b1 EOF )
apt -list | sort >apt.list #將apt包的列表排序並輸出到apt.list文件中
·expr 1 + 5 #空格不能省略
expr 1 * 5 #會報錯 expr 1 \* 5 #加上轉義符後,正確
#如下兩行代碼是一個意思 [ 4 *1 ] expr 4 \* 1
#利用管道將echo命令的結果輸入到計算器bc中,返回結果 var1=$(echo "scale=4;3.14 / 5" | bc) #scale能夠肯定小數位數但不是四捨五入而是去尾,切記
echo $? #查看上一個命令的退出碼
exit 5
退出碼即爲5例1:less
#!/bin/bash #if用法的基本舉例 if pwd #if + 命令 若命令執行(退出碼爲0,或者說既判爲真?),則進行then then echo " It worked" #輸出 It worked,至於pwd的輸出,不會顯示出來的 fi #if 語句結束 #另外一個例子 if wrong #if + 命令 若命令不執行(退出碼不爲0,或者說既判爲否?),則跳過then then echo " It worked" #輸出 It worked,至於pwd的輸出,不會顯示出來的 fi #if 語句結束
例2命令行
#!/bin/bash # if -then -else 命令執行則then,不執行則else testuser=NoSuchUser # if grep $testuser /etc/passwd then echo "The bash files for user $testuser are:" ls - /home/$testuser/.b* echo #輸出空一行 else echo "The user $testuser does not exist on the system" echo fi
例3code
#!/bin/bash #嵌套的高級用法 elif ,實際上是:else+if testuser=NoSuchUser # if grep $testuser /etc/passwd then echo "The user $testuser exists on the system" elif ls -d /home/$testuser #else後面接if,連寫的話會很方便 then echo "The user $testuser does not exist on the system" echo "However ,$testuser has a directory" fi
#數值比較功能 #eq 爲= g爲greater l大概爲less [ n1 -eq n2 ] #n1=n2 [ n1 -ge n2 ] #n1>=n2 [ n1 -gt n2 ] #n1>n2 [ n1 -le n2 ] #n1<=n2 [ n1 -lt n2 ] #n1<n2 [ n1 -ne n2 ] #n1!=n2
#字符串比較功能 #使用大於小於號必定要注意加上轉義號,不然會生成文件並斷定爲真 [ str1 = str2 ] #比較字符串是否相同 [ str1 !=s tr2 ] #比較字符串是否不一樣 [ str1 \< str2 ] #字符串1是否比2小,注意轉義號 [ str1 \> str2 ] #字符串1是否比2大,注意轉義號 [ -n str1 ] #字符串長度是否爲非0 [ -z str1 ] #字符串長度是否爲0 #test的比較大小和sort的正好反過來,由於test用的是標準ASCII順序
#能夠用來檢查系統中的文件,賊好用 [ -d file ] #檢查file是否存在併爲一個目錄(dir) [ -e file ] #檢查file是否存(exist) [ -f file ] #檢查file是否存在併爲一個文件(file) [ -r file ] #檢查file是否存在並可讀(read) [ -s file ] #檢查file是否存在並不是空 [ -w file ] #檢查file是否存在並可寫(write) [ -x file ] #檢查file是否存在並可執行 [ file1 -nt file2 ] #檢查file1是否比file2新(newer then) [ file1 -ot file2 ] #檢查file1是否比file2舊(older then)
#!/bin/bash #檢查用戶,對應的用戶有不一樣的輸出 case $USER in #注意in rich | barbara) #注意) echo "Welcome, $USER" echo "Please enjoy your visit";; #注意雙分號 testing) echo "Special testing account";; #注意雙分號 Jessica) echo "Do not forget to log off when you're done";; #注意雙分號 *) echo Sorry, you are not allowed here";; #注意雙分號 esac #反寫,結束
####1.for 命令排序
#!/bin/bash # for test in "Beijing Nanjing Shanghai Guangzhou Jinan Xi'an" #把列表中的值依次賦值給test,又用到了in,另外雙引號是個好東西 do echo "The next city is $test" done # 結束符號
#!/bin/bash # file="cities" #cities 文件名。文件須要和腳本在同一目錄下 # for test in $( cat $file) #讀取文件中的值 do echo "The next city is $test" done #但有時,文件中有空格,如New Shanghai,輸出就會當成New 和 Shanghai兩個,由於的字段分隔符爲空格
IFS=$'\n' #以換行符爲字段分隔符 IFS=$'\n':;" #以換行符、冒號、分號、雙引號爲字段分隔符 # #若是須要屢次改變IFS,把默認的先存起來是個安全的好主意 IFS.OLD=$IFS
#!/bin/bash #注意雙括號和分號 for (( i=1; i <=10 ;i++ )) #從1開始,每次加1,到10中止 do echo "The nest number is $i" done # #還可使用多個變量哦,用逗號分隔 for (( a=1 , b=10; a <=10 ;a++ ,b-- )) do echo " $a - $b" #沒作計算,就是輸出 done
#!/bin/bash # var1=10 # while [ $var1 -gt 0 ] #若var1大於0則繼續 do echo $var1 var1=$[ $var1 -1 ] #計算減一,注意方括號先後的空格 done
#!/bin/bash # var1=100 # until [ $var1 -eq 0 ] do echo $var1 var1=$[ var1 -25 ] done
break
是退出當下循環,break 2
是退出外面一層的循環,break 3
是退出外面的外面一層的循環#!/bin/bash #這個腳本最後的輸出會跳過var1大於5小於10的部分 for ((var1 =1 ; var1<15 ;var1++ )) do if [ $var1 -gt 5 ] && [ $var -lt 10 ] then continue fi echo "The number is $var1" done #注意,continue不要和計數部分寫在一塊兒,會跳過計數形成死循環的
done | sort >test.txt
將循環輸出排序並保存在test.txt文件中#!/bin/bash #這個腳本在掃描PATH環境變量下全部有可執行文件的目錄,也就是電腦中全部安裝的程序 #輸出真多…… IFS=: for folder in $PATH do echo "$folder:" for file in $folder/* do if [ -x $file ] then echo " $file" fi done done
未完待續,有新想法再寫ci