Shell Script
- 定義:shell script 是利用shell的功能所寫的一個“程序”(program)呻顽,這個程序是使用純文本文件贫母,將一些shell的語法和命令(含外部命令)寫在里面,搭配正則表達(dá)式、管道命令與數(shù)據(jù)流重定向等功能,以達(dá)到我們想要的處理目的都办。
- 簡單理解:shell script 可以簡單被看成批處理文件,也可以被說成一個程序語言(shell提供數(shù)組虑稼、循環(huán)琳钉、條件與邏輯判斷等功能),而這個程序語言由于都是利用shell與相關(guān)工具命令蛛倦,所以不需要編譯即可執(zhí)行歌懒,且擁有不錯的拍錯(debug)工具。
- 執(zhí)行方式:(必須具備可讀和可執(zhí)行權(quán)限)
- 絕對路徑:
/home/leiyang/shell.sh
- 相對路徑: 工作目錄在
/home/leiyang/
,直接使用./shell.sh
執(zhí)行溯壶。 - 變量
PATH
: 將shell.sh
放到PATH
指定目錄及皂,例如:~/bin/
- 絕對路徑:
- 新建shell
- 運行方式一:
sh shell.sh
或bash shell.sh
運行 - 運行方式二:
chmod a+x shell.sh
,./shell.sh
- 這兩種方式是在子進(jìn)程執(zhí)行的,當(dāng)進(jìn)程完成后且改,子進(jìn)程的各項變量或操作將會結(jié)束而不會回傳到父進(jìn)程验烧。
- 把變量回傳到父進(jìn)程方式
source shell.sh
- 運行方式一:
- sh01.sh
- 顯示與終結(jié)程序
#!/bin/bash
echo -e "Hello world! \a \n"
exit 1
echo $?
# exit n(n是數(shù)字,可以自定義錯誤信息)讓程序中斷钾虐,并且回傳一個值給系統(tǒng),若接著執(zhí)行echo $? 可得到n值笋庄。
- sh02.sh
- 用戶的輸入與顯示
#!/bin/bash
read -p "Please input your first name:" firstname # 提示用戶輸入
read -p "Please input your last name:" lastname # 提示用戶輸入
echo -e "\nYour full name is : $firstname $lastname" # 顯示輸出結(jié)果
- sh03.sh
- 創(chuàng)建文件 輸入文件名當(dāng)前日期和前一天和前兩天日期拼接
#!/bin/bash
# 1.讓用戶輸入文件名效扫,并取得fileuser變量;
echo -e "I will use 'touch' command to create 3 files." # 純文字顯示
read -p "Please input your filename:" fileuser # 提示用戶輸入
# 2.避免用戶隨意按鍵[Enter],利用變量功能分析文件名是否設(shè)置;
filename=${fileuser:-"finename"} # 判斷是否配置文件名
echo "$fileuser"
# 3.利用date命令獲取所需要的文件名;
date1=$(date --date='2 days ago' +%Y%m%d)
date2=$(date --date='1 days ago' +%Y%m%d)
date3=$(date +%Y%m%d)
echo "$date1"
echo "$date2"
echo "$date3"
file1=${filename}${date1}
file2=${filename}${date2}
file3=${filename}${date3}
echo $file1
echo $file2
echo $file3
# 4.創(chuàng)建文件;
touch $file1
touch $file2
touch $file3
- sh04.sh
- 數(shù)值運算
- $((運算內(nèi)容))
- bash shell默認(rèn)僅支持整數(shù)類型,可以進(jìn)行 +直砂、-菌仁、*、/静暂、%運算济丘。
#!/bin/bash
total=$(( 13 * 3 ))
echo "13 * 3 = $total"
echo $(( 13 % 3 ))
- Shell 字符串
字符串是shell編程中最常用最有用的數(shù)據(jù)類型(除了數(shù)字和字符串,也沒啥其它類型好用了)洽蛀,字符串可以用單引號摹迷,也可以用雙引號,也可以不用引號郊供。單雙引號的區(qū)別跟PHP類似峡碉。
-
單引號
str='this is a string'
-
單引號字符串的限制:
- 單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的驮审;
- 單引號字串中不能出現(xiàn)單引號(對單引號使用轉(zhuǎn)義符后也不行)鲫寄。
-
雙引號
your_name='qinjx' str="Hello, I know your are \"$your_name\"! \n"
-
雙引號的優(yōu)點:
- 雙引號里可以有變量
- 雙引號里可以出現(xiàn)轉(zhuǎn)義字符