本文大部分資料來自: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)