個(gè)人自定義
為了能在 Linux 全局運(yùn)行腳本继薛,所以我先創(chuàng)建了一個(gè)屬于自己的文件夾
路徑如下
root@iZwz90b9sw5qoothlv316kZ:/draper/bash#
并在 /etc/profile 中設(shè)置 PATH
環(huán)境變量
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH:/draper/bash
PATH
設(shè)置了很多環(huán)境變量,例如 Java 還有 Maven,Linux 依靠:
來分隔環(huán)境變量杖玲,
所以在后面添加:/draper/bash
來聲明環(huán)境變量
在這個(gè)路徑下,有我的第一個(gè) shell 腳本 dra1.sh
#!/bin/bash
date
who
Linux 對(duì)于 #
開頭的行當(dāng)做注釋战秋,但唯獨(dú)第一行不會(huì)
這里表明了 Linux 要用哪個(gè) shell 來執(zhí)行 shell百侧, 當(dāng)前的這個(gè)是 bash
date 和 who 分別代表了兩個(gè)命令
-
date
顯示當(dāng)前時(shí)間 -
who
顯示當(dāng)前用戶是誰在何時(shí)登錄 Linux
我們運(yùn)行這個(gè)腳本
root@iZwz90b9sw5qoothlv316kZ:~# dra1.sh
Wed Oct 17 14:47:27 CST 2018
root pts/0 2018-10-17 09:11 (123.115.118.7)
可能會(huì)出現(xiàn)權(quán)限不足的問題,給文件授權(quán)就好了
chmod 775 dra1.sh
echo
有些 shell 可以顯示在屏幕上顯示一些信息給用戶一個(gè)提示
echo -n "This time is: "
date
這會(huì)顯示
This time is: Wed Oct 17 15:05:55 CST 2018
-n 代表在后面輸出后不換行谴供,并且要求后面的引號(hào)前保留一個(gè)空格块茁,這樣兩個(gè)命令就只輸出一行
使用變量
變量聲明分為環(huán)境變量和用戶變量
這里只說一下用戶變量
days=10
guest="kite"
echo "$guest checked in $days ago"
前兩行代表賦值,注意左右等號(hào)左右不要有空格
使用美元符號(hào)$guest
代表引用這個(gè)變量
輸出
kite checked in 10 ago
反引號(hào)
testing=`date`
echo "The date and time are: $testing"
注意反引號(hào)和單引號(hào)的區(qū)別桂肌,反引號(hào)在美式鍵盤(QWER) 通常和
~
在一起
反引號(hào)表示可以將 shell 命令輸出的值給變量
輸出
The date and time are: Wed Oct 17 15:27:41 CST 2018
退出腳本
Linux 提供了 $?
來保存上個(gè)執(zhí)行命令的退出碼
root@iZwz90b9sw5qoothlv316kZ:/draper/bash# echo $?
0
按照慣例数焊,一個(gè)成功結(jié)束的命令的退出狀態(tài)碼是 0,如果有錯(cuò)誤崎场,那狀態(tài)碼將會(huì)是一個(gè)正數(shù)
雖然退出狀態(tài)碼沒有什么慣例佩耳,但我們?nèi)稳豢梢越o出一些參考
退出狀態(tài)碼
exit 命令
exit 2
使表示退出且退出狀態(tài)碼為 2(不合適的 shell 命令)
使用結(jié)構(gòu)化命令
if-then
if command
then
commands
fi
Linux 的 if 語句可能跟其他語言的 if 不太一樣,我們可以舉個(gè)例子
if date
then
echo "it worked"
fi
exit 0
輸出結(jié)果是
it worked
這是因?yàn)?date
命令的退出狀態(tài)碼是 0 所以會(huì)進(jìn)入到 then 中
if-then-else
其結(jié)構(gòu)為
if command
then
commands
else
commands
fi
跟 if-then 屬于同一結(jié)構(gòu)不贅述了
case 命令
與主流語言的 switch 語句相似
其結(jié)構(gòu)為
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
我們寫一個(gè)腳本來運(yùn)行一下
read -p "請(qǐng)輸入一個(gè)數(shù)字: 1 2 3:" key
case $key in
1|2)
echo "key = 1 or 2";;
3)
echo "key = 2";;
esac
運(yùn)行結(jié)果如下
root@iZwz90b9sw5qoothlv316kZ:/draper/bash# dra1.sh
請(qǐng)輸入一個(gè)數(shù)字: 1 2 3:1
key = 1 or 2
root@iZwz90b9sw5qoothlv316kZ:/draper/bash# dra1.sh
請(qǐng)輸入一個(gè)數(shù)字: 1 2 3:2
key = 1 or 2
root@iZwz90b9sw5qoothlv316kZ:/draper/bash# dra1.sh
請(qǐng)輸入一個(gè)數(shù)字: 1 2 3:3
key = 2
root@iZwz90b9sw5qoothlv316kZ:/draper/bash#
獲取用戶輸入
如果你是從上到下依次看的
你會(huì)注意到我前面沒講的 read
指令
read -p "請(qǐng)輸入一個(gè)數(shù)字: 1 2 3:" key
-p
意味著我們可以給予用戶提示符谭跨,指的是引號(hào)中的字符串干厚。
如果不加 =p
腳本語句就是
read key
會(huì)顯得很僵硬
創(chuàng)建函數(shù)
基本的腳本函數(shù)
創(chuàng)建函數(shù)
結(jié)構(gòu)為
function name (){
commands
}
或者是
name() {
commands
}
調(diào)用函數(shù)
name
這是沒有返回值得函數(shù),所以只用調(diào)用名字就可以了
OK螃宙,shell 暫時(shí)說這些蛮瞄,不定期更新。