Linux shell脚本编程(二)
生活随笔
收集整理的這篇文章主要介紹了
Linux shell脚本编程(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Linux shell腳本編程(二)
-------------------------------------------------------------------- 注:如果你對python感興趣,我這有個學習Python基地,里面有很多學習資料,感興趣的+Q群:895817687 -------------------------------------------------------------------- 1 練習:求100以內所有偶數之和;2 使用至少三種方法實現;3 4 示例1:5 6 #!/bin/bash7 #8 declare -i sum=0 #聲明一個變量求和,初始值為09 10 for i in $(seq 0 2 100); do11 sum=$(($sum+$i))12 done13 14 echo "Even sum: $sum."15 16 示例2:17 18 #!/bin/bash19 #20 declare -i sum=021 22 for i in {1..100}; do23 if [ $[$i%2] -eq 0 ]; then24 sum=$[$sum+$i]25 fi26 done27 28 echo "Even sum: $sum."29 30 增強型賦值:31 +=32 sum=$[$sum+$i]33 let sum+=$i34 -=,*=,/=,%=,35 36 let count=$[$conunt+1] -->let count+=1-->let count++37 let count=$[$conunt-1] -->let count-=1-->let count--38 39 40 示例:顯示/etc目錄下所有的每個普通文件,而后統計一共有多少個這樣的文件;41 42 #!/bin/bash43 #44 declare -i count=045 46 for file in /etc/*; do47 if [ -f $file ]; then48 let count++49 echo "$count $file"50 fi51 done52 53 echo "Total: $count files."54 55 56 測試表達式:57 整數測試;-gt,-lt,-ge,-le,-eq,-ne58 字符串測試:==,>,<,!=,-z,-n,=~59 60 注意:61 (1)字符串等會比較測試[ "$hostname" == 'localhost' ]62 (2)模式匹配測試:[[ "STRING" -~ PATTERN ]]63 64 示例:寫一個腳本實現如下功能;65 獲取當前主機的主機名:66 如果當前主機的主機名為空,或者為localhost,則將其修改為www.mageedu.com67 68 組合測試條件:69 條件間邏輯運算:70 與:多個條件要同時滿足;71 或:多個條件滿足其一即可;72 非:對指定的條件取反;73 74 表達式組合:75 與:[[ CONDITION -a CONDITION2 ]]76 或:[[ CONDITION -o CONDITION2 ]]77 非:[ !CONDITION ]78 79 命令組合:80 與:COMMAND1 && COMMAND2 <-- [ EXPR1 ] && [ EXPR2 ]81 或:COMMAND1 || COMMAND282 非:!COMMAND83 84 false && true = false85 false && false = false86 87 true && false = true88 true && true = true89 90 if COMMAND; then91 COMMAND292 fi93 短路操作符:94 true || true = true95 true || false = true96 97 false || true = true98 false || false = false99 100 if ! COMMAND1; then 101 COMMAND2 102 fi 103 104 COMMAND1 && COMMAND2 || COMMAND3 105 if COMMAND1;then 106 COMMAND2 107 else 108 COMMAND3 109 fi 110 111 獲取當前主機的主機名: 112 如果當前主機的主機名為空,或者為localhost,則將其修改為www.mageedu.com 113 114 #!/bin/bash 115 # 116 hostname=$(hostname) 117 118 if [ -z "$hostname" -o "$hostname"=="localhost" ]; then 119 hostname www.magedu.com 120 fi 121 122 練習:寫一個腳本 123 (1)傳遞兩個文本文件路徑給腳本; 124 (2)顯示兩個文件中空白行數較多的文件及其空白行的個數; 125 (3)顯示兩個文件中總行數較多的文件及其總行數; 126 練習:寫一個腳本 127 (1)提示用戶輸入一個字符串; 128 (2)判斷: 129 如果輸入的是quit,則退出腳本; 130 否則,則顯示其輸入的字符串內容; 131 132 練習:寫一個腳本,打印九九乘法表: 133 循環嵌套 134 135 #!/bin/bash 136 # 137 for j in {1..9}; do 138 for i in $(seq 1 $j); do 139 echo -n -e "${i}X${j}=$[$i*$j]\t" 140 done 141 echo 142 done 143 144 多分支的if語句: 145 單分支: 146 if CONDITION; then 147 if-true-分支 148 fi 149 雙分支: 150 if CONDITION; then 151 if-true-分支 152 else 153 if-false-分支 154 fi 155 156 多分支: 157 if CONDITION1; then 158 if -CONDITION-true-分支 159 elif CONDITION2; then 160 if-CONDITION2-true-分支 161 ... 162 else 163 if-ALL-false-分支 164 fi 165 166 示例:通過腳本參數傳遞一個文件路徑給腳本,判斷其類型: 167 168 #!/bin/bash 169 # 170 if [ $# -lt 1 ]; then 171 echo "Usage: $0 <path>" 172 exit 1 173 fi 174 175 if [ -f $1 ]; then 176 echo "Rgulat file." 177 elif [ -d $1 ]; then 178 echo "Directory." 179 elif [ -h $1 ]; then 180 echo "Symbolic link." 181 elif [ -b $1 ]; then 182 echo "Block special." 183 elif [ -c $1 ]; then 184 echo "Charactoer special." 185 elif [ -S $1 ]; then 186 echo "Socket file." 187 else 188 echo "file not exist or unknow type." 189 fi 190 191 示例:腳本可接受四個參數 192 start:創建文件/var/lock/subsys/SCRIPT_NAME 193 stop:刪除此文件 194 restatr:刪除此文件并重新創建 195 status:如果文件存在,顯示為“running”;否則,顯示為“stopped” 196 197 basename命令: 198 取得路徑的基名: 199 示例: 200 201 #!/bin/bash 202 # 203 prog=$(basename $0) 204 lockfile="/var/lock/subsys/$prog" 205 #echo $lockfile 206 207 if [ $# -lt 1 ]; then 208 echo "Usage: $prog start|stop|restart|status" 209 exit 1 210 fi 211 212 if [ "$1" == "start" ]; then 213 if [ -f $lockfile ]; then 214 echo "$prog is started yes." 215 else 216 touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.." 217 fi 218 elif [ "$1" == "stop" ]; then 219 if [ -f $lockfile ]; then 220 rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.." 221 else 222 echo "$prog is stopped yet." 223 fi 224 elif [ "$1" == "restart" ]; then 225 if [ -f $lockfile ]; then 226 rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..." 227 else 228 touch $lockfile && echo "$prog is stopped, Starting $prog ok..." 229 fi 230 elif [ "$1" == "status" ]; then 231 if [ -f $lockfile ]; then 232 echo "Running..." 233 else 234 echo "Stopped..." 235 fi 236 else 237 echo "Usage: $prog start|stop|restart|status" 238 exit 1 239 fi 240 241 case語句: 242 簡潔版多分支if語句: 243 使用場景:判斷某變量的值是否為多種情形中的一種時使用; 244 245 語法: 246 case $VARIABLE in 247 PATTERN1) 248 分支1 249 ;; 250 PATTERN2) 251 分支2 252 ;; 253 PATTERN3 254 分支3 255 ;; 256 ... 257 *) 258 分支n 259 ;; 260 esac 261 262 PATTERN可使用glob模式的通配符: 263 *:任意長度的任意字符; 264 ?:任意單個字符; 265 []:指定范圍內的任意單個字符; 266 a|b:多選1; 267 268 示例:提示鍵入任意一個字符,判斷類型: 269 腳本如下: 270 #!/bin/bash 271 # 272 read -p "Plz enter a character: " char 273 274 case $char in 275 [a-z]) 276 echo "A character." 277 ;; 278 [0-9]) 279 echo "A digit." 280 ;; 281 *) 282 echo "A special character." 283 ;; 284 esac 285 286 示例:腳本可接受四個參數 287 start:創建文件/var/lock/subsys/SCRIPT_NAME 288 stop:刪除此文件 289 restatr:刪除此文件并重新創建 290 status:如果文件存在,顯示為“running”;否則,顯示為“stopped” 291 292 腳本如下: 293 294 #!/bin/bash 295 # 296 prog=$(basename $0) 297 lockfile="/var/lock/subsys/$prog" 298 #echo $lockfile 299 300 if [ $# -lt 1 ]; then 301 echo "Usage: $prog start|stop|restart|status" 302 exit 1 303 fi 304 case $1 in 305 start) 306 if [ -f $lockfile ]; then 307 echo "$prog is started yes." 308 else 309 touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.." 310 fi 311 ;; 312 stop) 313 if [ -f $lockfile ]; then 314 rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.." 315 else 316 echo "$prog is stopped yet." 317 fi 318 ;; 319 restart) 320 if [ -f $lockfile ]; then 321 rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..." 322 else 323 touch $lockfile && echo "$prog is stopped, Starting $prog ok..." 324 fi 325 ;; 326 status) 327 if [ -f $lockfile ]; then 328 echo "Running..." 329 else 330 echo "Stopped..." 331 fi 332 ;; 333 *) 334 echo "Usage: $prog start|stop|restart|status" 335 exit 1 336 esac總結
以上是生活随笔為你收集整理的Linux shell脚本编程(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux shell脚本编程(一)
- 下一篇: Linux shell脚本编程(三)