# shell 腳本
文件后綴.sh
```
#!/bin/bash
//頭部文件
```
編寫完成保存后給.sh加權限 就可以執行了
```
chmod +x test.sh
//加權限 test.sh是自己編寫好保存好的文件
```
本目錄下
```
./test.sh //就執行了這個文件
```
# 注釋規則:
```
# 注釋
```
# 變量聲明:
```
變量名=值 // =左右不能有空格
```
# 打印變量值:
```
ceho $變量名
```
# 字符串拼接:
```
$變量1$變量2 //直接挨到一起就行
```
# 獲取字符串長度:
```
echo ${字符串變量} //注意字符串變量是不加$符號的
```
# 截取字符串長度:
```
echo ${字符串變量:1:5} //截取第1個字符串到第5個的字符串值
```
# 聲明調用數組:
```
變量=(‘值1’‘值2’‘值3’) //聲明一個數組
```
```
echo ${變量[0]}
echo ${變量[1]} //打印數組
```
```
echo ${變量[*]}
echo ${變量[@]} //獲取數組元素
```
```
echo ${#變量[*]}
echo ${#變量[@]} //獲取數組長度
```
# 傳值:
```
腳本 參數1 參數2 參數3
接受參數 $1 $2 $3
$# 傳遞到腳本的參數個數
$$ 腳本運行的當前進程ID號
$? 顯示最后命令的退出狀態。 D表示沒有錯誤,其他任何值表明有錯誤。
```
# 重定向:
```
>輸出重定向
>輸入重定向
echo 新文件 > 要覆蓋的文件 //輸出重定向
```
```
定時任務
/dev/null/2>&1
```
# 判斷:
```
if[ 變量 == 值 ] //這個地方要有空格[ ]里
then
echo "輸出的條件"
fi
```
```
運算符
-eq等于 -ne 不等于 -gt大于 -lt小于 -ge大于等于 -le小于等于
邏輯運算符
!取反 -o 或 -a且
```
## **注意:如果if 用[[ ]] 雙引號的情況下,可以使用&& || 等運算符否則使用以上運算符**
**判斷代碼案例:**
```
usename="liudehua"
if [ $usename == "liudehua" ]
then
echo "hello word"
fi
```


## **多條件判斷代碼案例:**
```
#!/bin/bash
usename=$1 #外部傳值
if [ $usename -lt 60 ] # -lt是小于
then
echo "不及格"
elif [ $usename -gt 60 -a $usename -lt 80 ] #-gt大于 -a 是并且相當于&&
# elif相當于elseif
then
echo '良好'
else
# then相當于{}
echo "優秀"
fi #fi相當于閉合if
```
# **判斷目錄或者文件是否存在**
```
-e //判斷目錄或者文件是否存在
```
```
-d //判斷目錄是否存在
```
```
-f //判斷文件是否存在
```
**
輸入文件是否存在不存在就創建代碼案例:**
```
[[ -e $1]] || mkdir $1 //
輸入文件是否存在不存在就創建
```
# 運算符
```
`expr $a + $b`
// 單獨的運算符是計算不了的 要加 反引號`` expr + (+左右要有空格)
```
## 代碼案例:


# 循環
```
語法:
for i in
do
done
```
```
for i in 1 2 3 4 5
do
echo $i
done
```
## 第二種for循環語法:
```
for i in {0..10}
do
echo $i
done
```
# while 循環語法:
一直循環下去
```
while true
//條件為true 相當于 while(1)
do
echo 'jjjj'
//一直循環下去 打印jjj
done
```
## 第二種while語法:
運行.sh腳本后 ,read 變量 接收終端輸入的字符串
```
while read name //read name 是接收輸入的字符串 在終端輸入的字符串
do
echo $name
done
```
注意::ctrl+c 退出.sh腳本
# case流程語法
```
變量
case 變量 in
A值)
如果等于A值執行
;; //結束一條語句
esac
//結束語法
```
代碼應用:
```
action=$1
//接收輸入的值
case $action in
//case語法
start)
//如果值等于start輸出這個的值
echo 'start'
;;
stop)
//如果值等于stop輸出這個的值
echo 'stop'
;;
restart)
//如果值等于restart輸出這個的值
echo 'restart'
;;
default)
//如果值等于default輸出這個的值
echo 'star|stop|restart'
;;
esac
```
執行.sh腳本

# 函數定義與使用
```
第一種定義方法:
function 函數名稱(){
}
第二種定義方法:
函數名稱(){
}
```
## 函數調用:
在函數定義之后調用,不能在函數定義之前調用
```
函數名 //調用
```
函數語法解釋:
```
#!/bin/bash
function xiao(){
echo "第一個函數"
}
xiao # //調用函數
```
## 函數傳參數調用:
```
#!/bin/bash
function xiao(){
echo `expr $1 + $2`
//$1 $2接受參數
}
xiao 100 200 # //傳遞參數
```
# 文件引入:
```
. /全路徑 /全路徑/.sh //. 后面帶空格
```
第二種引入方法
```
source /全路徑/.sh
```
## 文件引入代碼語法:
```
#!/bin/bash
. /root/test.sh
```
# 輸出帶顏色字體: