Shell簡介:
Shell是一個命令直譯器,也可以看做為一種系統軟體,提供了使用者與核心之間進行互動的一種通道,它解釋由使用者輸入的命令並且把它們送到核心去執行,執行效率高。
1 #!/bin/bash 2 3 # 第一個指令碼 4 # chmod +x ./test.sh 使指令碼具有執行許可權 5 # ./test.sh 在當前目錄下執行指令碼 6 # /bin/sh test.sh 指定直譯器,執行指令碼 7 8 #echo "hello World!" 9 10 11 #----------------------------------------------# 12 # 第二個指令碼 13 # 宣告變數、給變數賦值、宣告變數為只讀型別 14 your_name="zhoufei" 15 echo $your_name 16 echo ${your_name} 17 18 your_name="google" 19 echo ${your_name} 20 21 #readonly your_name 22 your_name="宣告為只讀變數" 23 24 # 字串 25 # ''輸出純字串,有變數也失效 26 # ""裡面可以包含變數 27 your_name2='baidu' 28 str="hello I know your are \"${your_name2}\" ! \n" 29 echo ${str} 30 31 # 字串拼接 32 your_name3="baidu3" 33 greeting="I like "${your_name3}"! ---" 34 greeting2="I like "$your_name3" ! \n" 35 echo ${greeting} ${greeting2} 36 37 # 字串長度 38 echo "${your_name3} 長度是:${#your_name3}" 39 40 # 子字串 41 your_name4='獲取這個字串的後三位' 42 echo ${your_name4:8:3} 43 44 # 查詢子字串 45 your_name5="runoob is a great company" 46 #echo `expr index "${your_name5}" is` 47 48 # 陣列 49 echo "----------陣列---------" 50 array_name=(name1 name2 name3) 51 echo "這是一個陣列-${array_name[@]}" 52 array_name[3]='name4' 53 echo "這是一個陣列-${array_name[@]}" 54 echo "陣列的長度:${#array_name[@]}" 55 echo "陣列中第0個元素的長度:${#array_name[0]}" 56 57 # Shell傳遞引數 $n 58 echo "----------Shell傳遞引數---------" 59 echo 'Shell傳遞引數驗證如下:' 60 echo "檔名:$0" 61 echo "第一個引數:$1" 62 echo "第二個引數:$2" 63 echo "指令碼執行的程式ID號:$$" 64 65 # Shell運算子 66 # expr 是一個計算工具,完成表示式的求值操作 67 val1=`expr 1 + 1` 68 echo "expr 運算子的執行結果是$val1" 69 70 # 算術運算子 71 echo "----------算術運算子---------" 72 a=10 73 b=20 74 val2=`expr $a + $b` 75 val3=`expr $a - $b` 76 val4=`expr $a \* $b` 77 val5=`expr $a / $b` 78 val6=`expr $a % $b` 79 echo "a + b : $val2" 80 echo "a - b : $val3" 81 echo "a * b : $val4" 82 echo "a / b : $val5" 83 echo "a % b : $val6" 84 if [ $a == $b ]; then 85 echo "a 等於 b" 86 fi 87 if [ $a != $b ]; then 88 echo "a 不等於 b" 89 fi 90 91 # 關係運算子 92 echo "----------關係運算子---------" 93 if [[ $a -eq $b ]]; then 94 echo "a 等於 b" 95 fi 96 if [[ $a -ne $b ]]; then 97 echo "a 不等於 b" 98 fi 99 if [[ $a -gt $b ]]; then 100 echo "a 大於 b" 101 fi 102 if [[ $a -lt $b ]]; then 103 echo "a 小於 b" 104 fi 105 if [[ $a -ge $b ]]; then 106 echo "a 大於等於 b" 107 fi 108 if [[ $a -le $b ]]; then 109 echo "a 小於等於 b" 110 fi 111 112 # 布林運算子 !、-o、-a 113 echo "----------布林運算子---------" 114 if [[ $a != $b ]]; then 115 echo "a 不等於 b" 116 fi 117 if [ $a -lt $b -o $a -eq $b ]; then 118 echo "a 大於等於 b" 119 fi 120 if [ $a -gt 1 -a $b -lt 10 ]; then 121 echo "a > 1 並且 b < 10" 122 else 123 echo "a > 1 並且 b < 10 是錯誤的!" 124 fi 125 126 # 邏輯運算子 && || 127 echo "----------邏輯運算子---------" 128 if [[ $a -gt 1 && $a -lt 100 ]]; then 129 echo "a 大於1 並且 a 小於100 成立" 130 else 131 echo "a 大於1 並且 a 小於100 不成立" 132 fi 133 if [[ $a -le 10 || $a -gt 100 ]]; then 134 echo 'a 小於等於10 或者 a 大於 100 有一個成立' 135 else 136 echo 'a 小於等於10 或者 a 大於 100 都不成立' 137 fi 138 139 # 字串運算子 140 echo "----------字串運算子---------" 141 string1='string1' 142 string2='string2' 143 if [[ $string2 = $string1 ]]; then 144 echo "string1 等於 string2" 145 else 146 echo "string1 不等於 string2" 147 fi 148 if [[ $string2 != $string1 ]]; then 149 echo "string2 不等於 string1" 150 fi 151 if [[ -z $string1 ]]; then 152 echo "string1 長度是:0" 153 fi 154 if [[ -n $string1 ]]; then 155 echo "string1 長度不是:0" 156 fi 157 if [[ $string1 ]]; then 158 echo "string1 不為nil" 159 fi 160 161 # 檔案測試運算子 162 echo "----------檔案測試運算子---------" 163 file1='假如為:檔案' 164 file2='假如為:資料夾' 165 if [[ -d $file2 ]]; then 166 echo '檢測檔案為資料夾' 167 fi 168 if [[ -f $file1 ]]; then 169 echo '檢測檔案為普通檔案' 170 fi 171 if [[ -s $file1 ]]; then 172 echo '檢測檔案為空' 173 fi 174 if [[ -e $file1 ]]; then 175 echo '檢測檔案為存在的' 176 fi 177 178 # echo命令 179 echo "----------echo命令---------" 180 echo "It is a test" 181 echo "\"It is a test\"" 182 echo "下面換行 \n" 183 echo -e "下面不換行 \c" # -e 開啟轉義 \c 不換行 184 echo "字串重定向到檔案中" > myfile 185 echo '字串原樣輸出 $a' 186 echo `date` #顯示執行結果 187 188 # printf命令 189 # printf format-string [arguments...] 190 # %s %c %d %f都是格式替代符 191 # %-10s 指一個寬度為10個字元(-表示左對齊,沒有則表示右對齊),任何字元都會被顯示在10個字元寬的字元內,如果不足則自動以空格填充,超過也會將內容全部顯示出來。 192 # %-4.2f 指格式化為小數,其中.2指保留2位小數。 193 # \n換行 \r回車 194 echo "----------printf命令---------" 195 echo 'Hello, Shell,能夠自動換行' 196 printf "Hello, Shell,不能自動換行,需要手動加換行符 \n" 197 printf "%-10s %-8s %-4s\n" 姓名 性別 體重 198 printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.12345 199 printf "%-10s %-8s %-4.2f\n" 楊過 男 77.12345 200 201 # test命令 202 # Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字元和檔案三個方面的測試。 203 echo "----------test命令---------" 204 test1=100 205 test2=101 206 testString1='testString1' 207 testString2='testString2' 208 if test $test1 -lt $test2 ; then 209 printf "%s\n" test1小於test2 210 fi 211 if test -z testString1 ; then 212 printf "testString1長度為0" 213 else 214 printf "testString1長度不為0 ,:%s\n" testString1 215 fi 216 if test -e ./test1.sh ; then 217 printf "檔名:test1.sh 存在\n" 218 else 219 printf "檔名:test1.sh 不存在\n" 220 fi 221 222 # Shell流程控制 223 echo "----------Shell流程控制---------" 224 # if else-if else 225 if [[ $a == $b ]]; then 226 echo "a 等於 b" 227 elif [[ $a -gt $b ]]; then 228 echo "a 大於 b" 229 elif [[ $a -lt $b ]]; then 230 echo "a 小於 b" 231 else 232 echo "沒有符合條件的" 233 fi 234 num1=$[2*3] 235 num2=$[1+5] 236 if test $num1 -eq $num2 ; then 237 echo "num2 等於 num1" 238 else 239 echo "num1 不等於 num2" 240 fi 241 # for 迴圈 242 for loop in 1 2 3 4 5 6; do 243 # echo "當前輸入的值是:$loop" 244 printf "當前輸入的值是:%s\n" $loop 245 done 246 for string in 'This is a String!'; do 247 echo "$string" 248 done 249 # while 語句 250 # let 命令,它用於執行一個或多個表示式 251 ignore0(){ 252 count=1; 253 while [[ $count -lt 10 ]]; do 254 echo "while 執行結果:$count" 255 let "count++" 256 done 257 echo '按下 <CTRL-D> 退出' 258 echo -n '輸入你最喜歡的電影名: ' 259 while read Film ; do 260 echo "是的! $Film 是一部好電影!" 261 done 262 } 263 #ignore0 264 ignore1(){ 265 while true: 266 do 267 echo "無限迴圈!" 268 done 269 until false ; do 270 echo "無限迴圈!" 271 done 272 } 273 #ignore1 274 # case語句 275 ignore2(){ 276 echo '請輸入1到4之間的數字' 277 echo '你輸入的數字是:' 278 read aNum 279 case $aNum in 280 1 ) 281 echo "輸入的數字為:$aNum" 282 ;; 283 2 ) 284 echo "輸入的數字為:$aNum" 285 ;; 286 3 ) 287 echo "輸入的數字為:$aNum" 288 ;; 289 4 ) 290 echo "輸入的數字為:$aNum" 291 ;; 292 * ) 293 echo "你輸入的數字不在1-4之間" 294 ;; 295 esac 296 } 297 #ignore2 298 # break命令 299 ignore3(){ 300 while true 301 do 302 echo '輸入1-5之間的資料' 303 read aNum 304 case $aNum in 305 1|2|3|4|5 ) 306 echo "輸入的數字為:$aNum" 307 ;; 308 * ) 309 echo "你輸入的數字不在1-4之間" 310 break 311 #continue 312 echo "遊戲結束" 313 314 esac 315 done 316 } 317 #ignore3 318 # Shell 函式 319 echo "----------Shell 函式---------" 320 demoFunc(){ 321 echo '這是第一個函式' 322 } 323 echo '第一個函式開始' 324 demoFunc 325 echo '第一個函式結束' 326 funWithReture(){ 327 echo '這個函式會對輸入的引數進行加法執行...' 328 echo '輸入第一個引數:' 329 read para1 330 echo '輸入第二個引數:' 331 read para2 332 echo "兩次輸入的引數分別是:$para1---$para2" 333 return $(($para1+$para2)) 334 } 335 funWithReture 336 echo "輸入的數字之和為:$?" 337 338 # Shell 輸入/輸出重定向 339 echo "----------Shell 輸入/輸出重定向---------" 340 date >> myfile 341 cat myfile 342 wc -l << EOF 343 標題 344 測試 Head Document 型別 345 的追加重定向命令 346 EOF 347 ls > myfile 2>&1 348 ls > /dev/null 2>&1 349 350 # Shell 檔案包含 351 echo "----------Shell 檔案包含---------" 352 source ./test2.sh 353 echo "引用外部的test2.sh檔案中的url變數,URL變數為:$url"