ubuntu之shell編程學習筆記3——編程的基本元素

1、for while until三種循環的使用方法

語法:for var; do
....
done
例如:for ((i=1;i<=10;i++))
do
echo "num is $i"
done

語法:while :; do
echo looping...
done
若爲 ture ,則執行 do 與 done 之間的命令,然後重新判斷 while 後的 return value 。
* 若爲 false ,則不再執行 do 與 done 之間的命令而結束循環

與 while 相反,until 是在 return value 爲 false 時進入循環,否則結束。
* break
* continue
break 是用來打斷循環,也就是"強迫結束" 循環

continue 後面也可指定一個數值 n ,以決定繼續哪一層(從裏向外計算)的循環,默認值爲 continue 1 ,也就是繼續當前的循環。

2、條件控制與流程控制

test命令用法。功能:檢查文件和比較值

1)判斷表達式
if test  (表達式爲真)
if test !表達式爲假
test 表達式1 –a 表達式2                  兩個表達式都爲真
test 表達式1 –o 表達式2                 兩個表達式有一個爲真

2)判斷字符串
test –n 字符串                                   字符串的長度非零
test –z 字符串                                    字符串的長度爲零
test 字符串1=字符串2                    字符串相等
test 字符串1!=字符串2               字符串不等

3)判斷整數
test 整數1 –eq 整數2                        整數相等
test 整數1 –ge 整數2                        整數1大於等於整數2
test 整數1 –gt 整數2                         整數1大於整數2
test 整數1 –le 整數2                         整數1小於等於整數2
test 整數1 –lt 整數2                          整數1小於整數2
test 整數1 –ne 整數2                        整數1不等於整數2

4)判斷文件
test  File1 –ef  File2                            兩個文件具有同樣的設備號和i結點號
test  File1 –nt  File2                            文件1比文件2 新
test  File1 –ot  File2                            文件1比文件2 舊
test –b File                                           文件存在並且是塊設備文件
test –c File                                           文件存在並且是字符設備文件
test –d File                                           文件存在並且是目錄
test –e File                                           文件存在
test –f File                                            文件存在並且是正規文件
test –g File                                           文件存在並且是設置了組ID
test –G File                                           文件存在並且屬於有效組ID
test –h File                                           文件存在並且是一個符號鏈接(同-L)
test –k File                                           文件存在並且設置了sticky位
test –b File                                           文件存在並且是塊設備文件
test –L File                                           文件存在並且是一個符號鏈接(同-h)
test –o File                                           文件存在並且屬於有效用戶ID
test –p File                                           文件存在並且是一個命名管道
test –r File                                            文件存在並且可讀
test –s File                                           文件存在並且是一個套接字
test –t FD                                             文件描述符是在一個終端打開的
test –u File                                           文件存在並且設置了它的set-user-id位
test –w File                                          文件存在並且可寫
test –x File                                           文件存在並且可執行

if語法:if-then-else

if [] ;then

done..................

fi

例子:

if [-d /root/tmp]; then

echo '/root/tmp目錄存在'

else

echo '/root/tmp目錄不存在'

fi

if test "str" > "xyz"

echo "字符串str比較大"

else

echo "字符串str比較小"

fi

命令1 && 命令2

&&稱爲邏輯的AND,其運作的方式:如果“命令1”執行結果爲真,纔會執行“命令2”.

例如:

[ -z "$PS1" ] && return

先判斷$PS1變量值是否爲空,如果爲空,就執行return命令,由子shell環境返回到父shell,這等於是結束執行該script.

命令1 || 命令2

運作方式爲:如果“命令1”執行爲假,纔會執行“命令2”

case的語法格式如下:
       case var in
            exp-1) 命令體1 ;;
            exp-2) 命令體2 ;;
                  ...
            *)    命令體 ;;
例子:

case $param in
$((a+b))) echo "NO1"
                param="dog"   ;;
hello)      echo "NO2"
               param="cat";;
10)          echo "NO3"
               param="pig";;
*)            echo "ERROR"
esac

select語句結構:
select 變量 in 選項1 選項2 ;do
break
done

例如:for循環裏嵌套一個 select語句
#!/bin/sh
for((i=1;i < 3;i=$[$i+1])); do 
echo "What is your favourite OS?"
select var in "Linux" "Cnu Hurd" "Free BSD" "Other";do
break
done
echo "You have selected $var"
done

3、數組和expr

shell 數組

BASH只支持一維數組,但參數個數沒有限制。

聲明一個數組:
declare -a array,或者直接賦值

數組賦值:
(1) array=(var1 var2 var3 ... varN)
(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)
(3) array[0]=var1
    arrya[1]=var2
    ...
    array[n]=varN

計算數組元素個數:
${#array[@]}  或者  ${#array[*]}

引用數組:
echo ${array[n]}
 
遍歷數組:
filename=(`ls`)
for var in ${filename[@]};do
echo $var
done

expr操作

expr命令一般用於整數值,但也可用於字符串。一般格式爲:
expr argument operator argument
例子:增量計數
expr在循環中用於增量計算。首先,循環初始化爲0,然後循環值加1,反引號的用法意
即替代命令。最基本的一種是從(expr)命令接受輸出並將之放入循環變量。
$LOOP=0
$LOOP=`expr $LOOP + 1`
使用乘號時,必須用反斜線屏蔽其特定含義。因爲shell可能會誤解顯示星號的意義。
$expr 30 * 3
90

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章