Shell ==> 基礎

1、規範shell

  • Shell腳本是以.sh結尾的文件;
  • sh 文件的第一行內容爲 #!/bin/bash,它告訴系統使用(Bourne Again Shell)解釋器來執行;
  • shell 中的註釋:# ;
  • shell 文件的執行有兩種方式:
    • sh 文件名.sh;
    • 添加可執行權限:chmod +x 文件名.sh ,再進入文件所在目錄,執行 ./文件名.sh;

2、變量bash

  • 變量名=變量值:等於號兩邊不能有空格;
  • 變量命名規範:不能以數字開頭,能夠由字母、數字、下劃線組成;
  • 輸出變量內容:echo $變量名;
  • 變量的釋放:unset 變量名;
  • 特殊的變量,帶有空格的變量定義
    • 雙引號"":若是變量值中存在 $變量名 的話,那麼輸出結果將會是變量名對應的變量值。若是想原樣輸出內容,能夠在 $變量名 前面加轉義字符 「\」;
    • 單引號'':若是變量值中存在 $變量名,那麼將原樣輸出;
    • 反單引號``:存放的是命令;

練習:ide

#!bin/bash
dir=`pwd`
echo "當前所在的目錄是:$dir"
輸出當前所在的目錄
#!bin/bash
# 進入/etc目錄下
cd /etc
# 計算文件個數
num=`ls -al|wc -l`
# 輸出
echo "/etc下文件個數爲:$num"
計算/etc目錄下有多少個文件
#!bin/bash
read -p "請輸入指定目錄:" dir
cd $dir
# 計算文件個數
num=`ls -al|wc -l`
# 輸出
echo "$dir下文件個數爲:$num"
統計任何指定目錄下的文件個數

read 用法函數

  • 變量名能夠有一個或者多個,變量名用空格隔開,變量值用空格隔開;
  • 若是變量值多於變量名,那麼將會把多餘的變量值賦值給最後一個變量;
  • 能夠添加提示信息:read -p "提示的內容" 變量名;

3、參數傳遞測試

  • 命令:文件名 參數,如:sh script.sh /etc;
  • 文件中接收參數的方式
    • $1---> 表示第一個參數;
    • $2---> 表示第二個參數;
    • $n---> 表示第n個參數;
    • $0---> 表明文件名;
    • $@--> 顯示所有參數;
    • $#--> 顯示參數的個數;

練習:spa

#!/bin/bash
echo "這個數據是$1"
echo "這個數據是$2"
echo "這是$0"
echo "這是$@"
echo "這是$#"

結果:3d

4、重定向code

把命令的結果輸出到文件中blog

  • 正確的命令:用 1 表示
    • 覆蓋:命令 1>文件名,如:ls 1>a.txt;
    • 追加:命令 1>>文件名,如:ls /tmp 1>>a.txt;
  • 錯誤的命令:用 2 表示
    • 覆蓋:命令 2>文件名,如:ls 2>a.txt;
    • 追加:命令 2>>文件名,如:ls /tmp 2>>a.txt;

5、條件判斷ip

一、if...else

if [ 條件 ]
then
 語句
else
 語句
fi
#####################
if [ 條件 ];then
 語句
else
 語句
fi
if...else語法
  • if 後面要有空格
  • 中括號內條件兩邊要有空格
  • 多個條件間要有空格
  • 條件中若是存在變量,那麼變量的兩邊要有雙引號,如:if [ "$dir" == "" ]

練習:

#!/bin/bash
dir=/root
command=`ls $dir`
if [ "$command" == "" ];then
    echo "目錄爲空"
else
    echo "目錄不爲空"
fi
判斷/root目錄是否爲空
#!/bin/bash
read -p "請輸入目標目錄:" dir
command=`ls $dir`
if [ "$command" == "" ];then
        echo "目錄爲空"
else
        echo "目錄不爲空"
fi
經過用戶輸入任意目錄判斷是否爲空
  • 字符串比較
    • ==:判斷是否相等
    • !=:判斷是否不相等
#!/bin/bash
read -p "請輸入用戶名和密碼:" username password
if [ "$username" == "admin" -a "$password" == "123456" ];then
        echo "用戶名和密碼正確"
else
        echo "用戶名或密碼不正確"
fi
判斷用戶輸入的用戶名和密碼是否正確
  • 邏輯運算符:
    • 或:-o
    • 與:-a
    • 非:!
#!/bin/bash
read -p "請輸入一個數字:" num
if [ "$num" -gt 0 ]
then
        ((num++))
        echo $num
else
        ((num--))
        echo $num
fi
輸入數字,判斷是否大於0
  • 比較運算符(數字)
    • -eq ---> 判斷是否相等
    • -ne ---> 判斷是否不相等
    • -gt ----> 判斷是否大於
    • -ge ---> 判斷是否大於等於
    • -lt ----> 判斷是否小於
    • -le ----> 判斷是否小於等於
  •  數字變量操做
    • 遞增
      • ((i++))
      • ((i+=1))
      • i=$[$i+1]
      • let i=i+1
      • i=$(($i+1))
    • 遞減也是同樣有上面5中方式
#!/bin/bash
read -p "請輸入對應的目錄:" dir
if test -d $dir
then
        num=`ls $dir|wc -l`
        echo "目錄$dir下的文件個數爲:$num"
else
        echo "目錄$dir不存在"
fi
判斷用戶輸入的目錄是否存在
  • 測試文件狀態
    • test 參數 變量名
    • 參數
      • -e:表示文件是否存在
      • -f:表示文件是否存在且爲文件
      • -d:表示文件名是否存在且爲目錄
      • -r:可讀
      • -w:可寫
      • -x:可執行

二、if...elif..else

if [ 條件 ]
then
 語句
elif [ 條件 ]
then
  語句
elif [ 條件 ]
then
  語句
....
else
  語句
fi
if...elif...else語法

練習:

判斷學生的成績,範圍在90-100提示優秀,80-90之間提示良好,70-80之間則提示通常,60-70之間提示及格。其餘則提示不及格

#!/bin/bash
read -p "請輸入學生的成績:" score
if [ "$score" -gt 90 -a "$score" -lt 100 ]
then
        echo "優秀"
elif [ "$score" -gt 80 -a "$score" -lt 90 ]
then
        echo "良好"
elif [ "$score" -gt 70 -a "$score" -lt 80 ]
then
        echo "通常"
elif [ "$score" -gt 60 -a "$score" -lt 70 ]
then
        echo "及格"
else
        echo "不及格"
fi
判斷學生成績

判斷用戶輸入的內容是否爲空,爲空則提示,不爲空則判斷是否爲目錄,不爲目錄則判斷是否爲文件,不然提示錯誤信息

#!/bin/bash
read -p "請輸入內容:" content
if [ -z "$content" ]
then
        echo "輸入內容爲空"
elif [ -d "$content" ]
then
        echo "是一個目錄"
elif [ -f "$content" ]
then
        echo "是一個文件"
else
        echo "輸入錯誤"
fi
判斷用戶輸入內容
  • 文件判斷
    • -r:文件是否存在且可讀
    • -w:文件是否存在且可寫
    • -x:文件是否存在且可執行
    • -f:文件是否存在且是普通文件
    • -d:文件是否存在且是一個目錄
    • -e:文件是否存在
    • -n:字符串長度是否不等於0
    • -z:字符串長度是否等於0

三、case

case $變量名 in
"")
  語句;;
"")
  語句;;
"")
  語句;;
.....
*)
  語句;;
esac
case...esac
  • case 這一行最後必須爲 in
  • ;; ----> 結束語句
  • *----> 默認分支
  • esac ---> case語句的結束
  • 值能夠是字符串也能夠是數字,還能夠是區間範圍,可是範圍必須是:[0-9]之間

練習:

#!/bin/bash
read -p "請輸入產品編號:" chr
case $chr in
"001")
        echo "檯燈";;
"002")
        echo "風扇";;
"003")
        echo "電腦";;
*)
        echo "默認是空調";;
esac
輸入一個字符串,判斷該用戶選擇哪款產品
#!/bin/bash
read -p "請輸入對客服的滿意度:" chr
case $chr in
[0-3])
        echo "不滿意";;
[4-6])
        echo "滿意";;
[7-9])
        echo "很是滿意";;
esac
滿意度調查

6、循環

一、for

for 變量名 in 列表
do
  語句
done
for循環格式

練習:

#!/bin/bash
#循環
for i in 1 2 3 4 5 6 7 8 9 10
do
    echo $i
done
輸出1到10之間的數
#!bin/bash
for i in `seq 1 2 10`
do 
        echo $i
done
輸出1到10之間的奇數
  • seq start size max
    • start:開始點
    • size:間隔
    • max:結束點
    • 若是size的值爲1,則能夠省略

二、while

while [ 條件 ]
do
    命令
done
while循環格式

練習:

#!bin/bash
i=1
sum=0
while [ "$i" -le 100 ]
do
        ((sum=sum+i))
        ((i++))
done
echo $sum
求1-100之間的和

7、函數

函數名(){
  代碼
}
函數格式
  • 函數的調用
    • 必須先定義再調用
    • 格式:直接使用函數名
  • 函數中的參數
    • 使用$n來接收數據
  • 返回值
    • 函數中默認的存在返回值
    • 正確時返回0
    • 錯誤時返回1
    • 查看返回值內容:$?

練習:

#!/bin/bash
# 定義函數
add(){
        sum=$(($1+$2))
return $sum
}
# 從鍵盤輸入
read -p "請輸入第一個數字:" aNum
read -p "請輸入第一個數字:" bNum
echo "輸入的兩個數分別爲:$aNum 和 $bNum"
add $aNum $bNum
# 輸出返回值
echo "兩個數之間的和爲:$?"
輸入任意兩個整數進行求和運算

輸入一個目錄,判斷目錄是否存在,若是不存在則給出提示,若是存在則提示輸入要建立的文件名,判斷建立的文件是否存在,若是不存在,則繼續建立,不然提示該文件已經存在,用函數實現

#!/bin/bash
# 建立文件函數
create_file(){
        # 進入目錄
        cd $1
        # 提示用戶輸入文件名
        read -p "請輸入須要建立的文件名:" filename
        # 判斷文件是否存在
        if test -e $filename
        then
                echo "文件已存在"
        else
                echo "文件不存在"
                echo "開始建立文件..."
                touch $filename
                echo "文件建立成功"
        fi        
}

# 提示用戶輸入
read -p "請輸入目錄名:" dir
if test -d $dir
then
        # 調用建立文件函數
        create_file $dir
else
        echo "目錄$dir不存在"
fi
建立文件
相關文章
相關標籤/搜索