shell學習(一)

算術運算

shell的算術運算真是奇怪,必須要加雙括號,若引用但括號會有bug
let命令的替代表示形式是:
((算術表達式)) 或 [算術表達式]

如下面代碼:

i=2
j=3
k=0
let "k=i+j"
echo $k
echo $(i+j)
echo $[i/j]

這裏寫圖片描述

一定要換爲$((i+j)) 纔行。
還有 let "k=i+j" 的雙引號要不要效果一樣

中括號可能忽略空格

下面的代碼就是左邊的中括號與裏面內容之間缺少括號而導致的錯誤

m -rf /home/tom/cdt
dir=/home/tom/cdt
[!-e$dir ]&& mkdir $dir

這裏寫圖片描述
正確的代碼是:

m -rf /home/tom/cdt
dir=/home/tom/cdt
[ !-e$dir ]&& mkdir $dir

條件測試語句
格式1: test 測試表達式
格式2: [ 測試表達式 ]
格式3: [[ 測試表達式 ]] (bash 2.x 版本以上)

在 [[ ]] 中可以使用通配符進行模式匹配

奇怪的case

echo -n "Do you agree with this? [yes or no]: "
read yn
case $yn in
  [Yy] | [Yy][Ee][Ss] ) echo "Agree." ;;
  [Nn] | [Nn][Oo]     )
                    echo "Not agree"
                    exit 1
                    ;;
  *)    echo " Invalid input. " ;;
  esca

一個複雜的while例子

先上代碼和結果

# 找到當前目錄下包含空格的文件,將空格替換成下劃線
DIR="."
find $DIR -type f | while read file;do
if [[ "$file" == *[[:space:]]* ]]; then
        mv "$file" $(echo "$file" | tr ' ' '_')
fi
done

查當前目錄下的所有普通文件:
find . -type f
通過管道 ‘|’ 把列出的當前行find到的所有文件名賦值給read命令後的變量file變量:
find $DIR -type f | while read file
將文件名的空格換爲”_”:
echo "$file" | tr ' ' '_'

select

select variable in list 
do          # 循環開始的標誌
  commands  # 循環變量每取一次值,循環體就執行一遍
done        # 循環結束的標誌

如:

select var in "Linux" "Gnu Hurd" "Free BSD" "Other";
do
echo "You have select $var"
done

select 是個無限循環
通常要配合 case 語句處理不同的選單及退出
select 循環的退出
按 ctrl+c 退出循環
在循環體內用 break 命令退出循環
或用 exit 命令終止腳本

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