linux bash腳本初學

本文大部分資料來自:https://my.oschina.net/FEEDFACF/blog/1789695

這個語言的學習感覺學到後面很難去實現一些比較大型的任務,目前學的也很淺,先發一下所有的知識點總結。

順便吐槽,這些東西是真難記啊~~~

比較符	描述  
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是否和str2相同
str1 != str2	檢查str1是否和str2不同
str1 < str2	檢查str1是否比str2小
str1 > str2	檢查str1是否比str2大
-n str1	檢查str1的長度是否非0
-z str1	檢查str1的長度是否爲0


文件比較
比較符	描述
-d file	檢查file是否存在並是一個目錄
-e file	檢查file是否存在
-f file	檢查file是否存在並是一個文件
-r file	檢查file是否存在並可讀
-s file	檢查file是否存在並非空
-w file	檢查file是否存在並可寫
-x file	檢查file是否存在並可執行
-O file	檢查file是否存在並屬當前用戶所有
-G file	檢查file是否存在並且默認組與當前用戶相同
file1 -nt file2	檢查file1是否比file2新
file1 -ot file2	檢查file1是否比file2舊


數組
array[$count]=$line 把內容保存到數組
${#array[@]} 獲取數組的元素個數
tmp=${array[i]}; 讀取數組第i個元素


方法的參數
參數的獲取使用$1,$2以此類推,特別地$0表示文件名、$#表示參數的個數


文件的讀取可以使用cat命令結合for in循環處理
注意:$IFS是文件循環處理的分隔符,按按行處理數據需要把該值設置爲$'\n',處理完成之後恢復舊值


文件寫入
使用輸出重定向把內容輸出到文件

>輸出重定向符號先清空文件然後把內容寫入到文件中
>>輸出重定向符號把內容追加寫入到文件中
此外可以結合其他命令實現排序、去重功能

sort命令對文件內容以行作爲單位排序
uniq命令對文件內容進行去重,以行爲單位,一般需要結合sort命令使用


sed流編輯
Sed流編輯結合正則表達式可以方便的對文本文件進行查詢、修改、刪除、增加等操作

注意:osx系統自帶的sed命令和標準的gnu-sed使用方式上有些差別,所以以下篇幅所談論到的sed都是標準的gnu-sed,
下面的這個腳本用於判斷系統是否安裝了gnu-sed,如果沒有會自動進行安裝,完成之後需要用戶執行顯示的命令配置下即可。

首先是學每個語言都必要的9*9乘法表,兩種寫法,感覺bash很多東西都是要記住細節,比較麻煩,但是代碼應該挺容易懂的。

echo "9*9====="
i=1
j=1
line=""
for((int i=1;i<=9;i++));do
    for((int j=1;j<=i;j++));do
    result=$[ $i * $j ]
    resultStr="$i x $j = $result"
    line=${line}${resultStr}"\t"
    done
    echo -e ${line}
done

while [[ i -lt 10 ]]; do
    j=1
    line=""
    while [[ j -lt 10 ]]; do
        if [[ j -le i ]]; then
            result=$[ $i * $j ]
            resultStr="$i x $j = $result"
            line=${line}${resultStr}"\t"
        fi
        j=$[ $j + 1 ]
    done
    echo  -e ${line}
    i=$[ $i + 1 ]
done

 

函數的簡單寫法,其實就是要明白傳參和接收參數的方法。

checkDirCore()
{
    cnt=$1  #當前文件名
    message=$2
    echo "scriptname=${0} paramscount=${#}"
    if [[ -d $cnt ]]; then
        echo "mu lu exist $cnt"
        flag=$cnt
    else
        echo "${message} ${cnt}"
        fla ${cnt}
    fi
}

echo $(pwd)
checkDirCore $(pwd) "指定類的查找目錄不存在" "hi"
dir=${flag}
echo "dir = ${dir}"

 

read()
{
    if [[ -d $1 ]]; then
        for item in $(ls $1); do
            itempath="$1/${item}"
            if [[ -d $itempath ]]; then
                echo "處理目錄 ${itempath}"
                read ${itempath}
            else
                echo "處理文件 ${itempath}"
            fi
        done
    else
        echo "error:not a same mulu"
    fi
}

read $(pwd)

 

 

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