Shell簡介
shell腳本:一堆命令的集合
shell腳本文件 擴展名為 .sh
shell腳本第一行一定要為:#!/bin/bash 表示使用bash
vi my.sh 創建shell腳本文件 執行前需要給腳本文件執行權限 :chmod 777 my.sh 后才可執行
交互式腳本
通過read讀取用戶輸入的東西
#!/bin/bash
echo "please input name:"
read name #用read讀取,將讀到的東西賦值給name變量
echo "your name:" $name #使用變量的值是不需要括括號
#!/bin/bash
read -p "input your age and height:" age height #一次性讀取兩個值 -p在輸入前可打印提示信息
echo "your age=$age, your height=$height" #在shell使用變量時不需要括括號
數值計算
shell僅支持整形,數值計算使用 $(( 表達式 ))
#!/bin/bash
echo "please input two int num:"
read -p "first num" first
read -p "second num" second
total=$(($first+$second)) #此處的=兩邊不能有空格
echo "$first+$second=$total" #使用變量時不需要括括號
test命令
test命令用于查看文件是否存在、權限等信息,可以進行數值,字符,文件三方面的測試。
&& 和 || 命令:cmd1 && cmd2 當cmd1執行完并且正確,那么cmd2開始執行,如果cmd1執行完畢錯誤,那么cmd2不執行。 cmd1 || cmd2 當cmd1執行完并且正確,那么cmd2不執行,反之cmd2執行。
#!/bin/bash
echo "please input file name:"
read -p "file name" filename
test -e $filename && echo "$filename is exist" || echo "$filename is not exist"
#使用test -e 查看某個文件是否存在
test $firststr == $secondstr && echo "$firststr等于$secondstr" || echo "$firststr不等于$secondstr" #測試兩個字符串是否相等
中括號 [ ] 判斷符
[ ]里只能輸入 == 或 !=
? ↓要有空格隔開 要有空格隔開↓ 且在 [ ] 內無論是變量還是字符串都要用 " " 引起來
[ "$firststr" == "$secondstr" ] && echo "$firststr等于$secondstr" || echo "$firststr不等于$secondstr"
默認參數
$0-$n,表示shell腳本的參數,包括shell腳本命令本身,shlle腳本命令本身為$0
$#:#表示最后一個參數的標號。
$@:表$1、?$2、$3.....
$0 就是shell腳本的名字;
$# 是共有多少個參數
$@ 整個參數的內容
$1 $2 第一個參數、第二個參數
條件判斷
#!/bin/bash
read -p "please input(Y/N)" value
if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
echo "your input is Y"
exit 0
fi
if [ "$value" == "N" ] || [ "$value" == "n" ]; then
echo "your input is N"
exit 0
fi
if 條件判斷; then
判斷成立要做的事情
fi
#if then else語句寫法:
if 條件判斷; then
條件判斷成立要做的事情
else
條件判斷不成立要做的事情
fi
#或者這樣寫:
if 條件判斷; then
條件判斷成立要做的事情
elif [條件判斷]; then
條件判斷成立要做的事情
else
條件判斷不成立要做的事情
fi
#!/bin/bash
read -p "please input(Y/N)" value
if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
echo "your input is Y"
#exit 0
elif [ "$value" == "N" ] || [ "$value" == "n" ]; then
echo "your input is N"
#exit 0
else
echo "你這輸入的是啥玩意??"
fi
最后還有case語句,寫法如下:
case $變量 in
“第1個變量內容”) //這里注意括號只有一半
? 程序段
? ;; //這兩個分號一定要寫,表示該程序塊結束!!
“第2個變量內容”)
? 程序段
? ;;
“第n個變量內容”)
? 程序段
? ;;
esac
#!/bin/bash
case $1 in
"a")
echo "param is:a"
;;
"b")
echo "param is:b"
;;
*) #這里的通配符*不能用引號引住
echo "其他的玩意"
;;
esac
運行時 ./my.sh a 需要加入參數
shell腳本函數
shell腳本支持自定義函數:
function 函數名(){
? //函數代碼
}
#!/bin/bash
function help(){
echo "this is help cmd"
}
function close(){
echo "this is close cmd"
}
case $1 in
"-h")
help #調用函數直接寫函數名
;;
"-c")
close
;;
esac
函數傳參:
#!/bin/bash
print(){
echo "param 1:$1"
echo "param 2:$2"
}
print a b #函數傳參直接在后面跟著
shell循環
while [條件]
do
? //循環代碼塊
done
until [條件] //條件不成立時進入循環
do
? //循環代碼塊
done
for 變量 in con1 con2 con3 //變量在什么范圍里
do
? //循環代碼塊
done
for ((i=0; i<=10; i++)) //注意有兩層括號
do
? //循環代碼塊
done