linux基礎(chǔ)之Shell Script入門介紹
linux基礎(chǔ)之Shell Script
1 Shell Scipt
使用指令和基本程序設(shè)計(jì)結(jié)構(gòu)寫成的程序,可以完成復(fù)雜的處理流程
1.1 程序書寫
#!/bin/bash
# Program:
# This program shows "Hello Wrold" in your screen.
# History:
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
echo -e "Hello World!\a\n"
exit 0
第一行 #!/bin/bash 說明使用的shell類型,不同shell語法可能不同,所以要說明使用的是哪種shell
其它#開始的表示注釋,注釋一般需要說明
程序功能
版本歷史
作者及聯(lián)系方式
設(shè)置好PATH變量,以便直接可以調(diào)用相應(yīng)路徑下的命令
程序主體部分
exit 0 表示程序執(zhí)行成功,向環(huán)境返回0
1.2 程序執(zhí)行
bash $bash sh01.sh #如果用sh sh01.sh而sh又不是指向bash,那么sh01.sh內(nèi)的語法就會(huì)不一致,因?yàn)橛?#sh去解釋了bash語法寫的shell script,針對(duì)這個(gè)程序,如果 #$type sh #得到sh is hashed (/bin/sh) #那么會(huì)輸出-e Hello world!,而非Hello world!
$./xxx.sh $chmod +x sh01.sh $./sh01.sh
source $ source sh01.sh
注:用bash和用source的不同在于,用bash執(zhí)行時(shí),shell script其實(shí)是在在父程序bash下新建了一個(gè) bash子程序,這個(gè)子程序中執(zhí)行,當(dāng)程序執(zhí)行完后,shell script里定義的變量都會(huì)隨子程序的結(jié)束而消失, 而用source執(zhí)行時(shí),是在父程序bash中執(zhí)行,shell script里定義的變量都還在。
2 簡(jiǎn)單Shell練習(xí)
2.1 例1 接收用戶輸入
# !/bin/bash
# Program:
# This program is used to read user's input
# Site: chabaoo.cn
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
read -p "Your first name:" firstname # tell user to input
read -p "Your last name:" lastname # tell user to input
echo -e "\nYour full name: $firstname $lastname"
exit 0
調(diào)用:
$ bash sh02.sh
Your first name:Minix
Your last name:007
Your full name: Minix 007
2.2 例2 按日期建立相似名字的文件
# !/bin/bash
# Program:
# This program is used to create files according to date
# History:
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
# Get filename from user
echo -e "I will use 'touch' to create three files."
read -p "Please input your filename:" tmpfilename
# Prevent the user input [Enter]
# Check whether filename exists or not
filename=${tmpfilename:-"filename"}
# Get the final filename according to date
date1=$(date --date='2 days ago' +%Y%m%d) # date of 2 days ago
date2=$(date --date='1 days ago' +%Y%m%d) # date of yesterday
date3=$(date +%Y%m%d) # date of today
filename1=${filename}${date1}
filename2=${filename}${date2}
filename3=${filename}${date3}
# Create file
touch "$filename1"
touch "$filename2"
touch "$filename3"
exit 0
調(diào)用:
$ bash sh03.sh
I will use 'touch' to create three files.
Please input your filename:WhoKnows
$ ls W*
WhoKnows20130201 WhoKnows20130202 WhoKnows20130203
3 判斷式
3.1 測(cè)試文件是否存在
test -e filename會(huì)根據(jù)filename是否存在返回0或1,再交由echo顯示結(jié)果:
$ test -e sh01.sh && echo "Exists" || echo "Not exists"
Exists
$ test -e sh0x.sh && echo "Exists" || echo "Not exists"
Not exists
3.2 test常用選項(xiàng)
3.2.1 文件類型
-e file :file是否存在
-f file :file是否存在且為文件
-d file :file是否存在且為目錄
3.2.2 權(quán)限
-r file :file是否有讀的權(quán)限
3.2.3 文件新舊比較
-nt file1 file2 : file1 是否比 file2新
3.2.4 整數(shù),字符串,多重條件判斷
-z string: string是否為空
例:輸出指定文件類型及屬性
# !/bin/bash
# Program:
# This program is used to output type and permission of the target file
# History:
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
# Get filename from user
echo -e "Input name of the file that you want to check.\n"
read -p "Filename:" filename
test -z $filename && echo "You must input a filename." && exit 0
# Check whether the file exists or not
test ! -e $filename && echo "The file '$filename' DO NOT exists" && exit 0
# Check type and permission of the file
test -f $filename && filetype="regular file"
test -d $filename && filetype="directory"
test -r $filename && perm="readable"
test -w $filename && perm="$perm writable"
test -x $filename && perm="$perm executable"
# Output result
echo "The filename:$filename is a $filetype"
echo "And Permissions are :$perm"
exit 0
調(diào)用:
$ bash sh04.sh
Input name of the file that you want to check.
Filename:sh01.sh
The filename:sh01.sh is a regular file
And Permissions are :readable writable executable
3.3 使用[]判斷
測(cè)試文件是否存在
$ [ -e "sh01.sh" ] ; echo $?
0
$ [ -e "sh0x.sh" ] ; echo $?
1
注意[]內(nèi)空格必須有
這種方法和test的test -e "sho1.sh" ; echo $? 是一致的
4 Shell Script 參數(shù)
# !/bin/bash
# Program:
# This program is used to ouput parameter of the shell script
# History:
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
echo "The script's name is ==> $0"
echo "Total parameter number is ==> $#"
# Check whether number of the parameter is less than 2
[ "$#" -lt 2 ] && echo "The number of parameter is less than 2.Stop here." && exit 0
echo "The whole parameter is ==> '$@'"
echo "The first parameter is ==> $1"
echo "The first parameter is ==> $2"
exit 0
調(diào)用:
$ bash sh05.sh 1a 2b 3c 4d
The script's name is ==> sh05.sh
Total parameter number is ==> 4
The whole parameter is ==> '1a 2b 3c 4d'
The first parameter is ==> 1a
The first parameter is ==> 2b
注:從以上程序可以看出與參數(shù)有關(guān)的預(yù)設(shè)變量如何表示
5 條件表達(dá)式
5.1 if 結(jié)構(gòu)
# !/bin/bash
# Program:
# This program is used to show if else expression
# History:
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
read -p "Please input [Y/N]" choice
if [ "$choice" == "Y" ] || [ "$choice" == "y" ];then
echo "OK, continue"
exit 0
fi
if [ "$choice" == "N" ] || [ "$choice" == "n" ];then
echo "Oh, interupt"
exit 0
fi
exit 0
調(diào)用:
$ bash sh06.sh
Please input [Y/N]y
OK, continue
$ bash sh06.sh
Please input [Y/N]n
Oh, interupt
5.2 if else 結(jié)構(gòu)
# !/bin/bash
# Program:
# This program is used to show if else expression
# History:
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
read -p "Please input [Y/N]" choice
if [ "$choice" == "Y" ] || [ "$choice" == "y" ];then
echo "OK, continue"
exit 0
elif [ "$choice" == "N" ] || [ "$choice" == "n" ];then
echo "Oh, interupt"
exit 0
else
echo "Input [Y/N]"
fi
exit 0
5.3 case
# !/bin/bash
# Program:
# This program is used to show case expression
# History:
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
read -p "Tell me your choice:[1-3]=>" choice
case $choice in
"1")
echo "Your choice is ONE"
"2")
echo "Your choice is TWO"
"3")
echo "Your choice is THREE"
esac
exit 0
調(diào)用:
$ bash sh08.sh
Tell me your choice:[1-3]=>2
Your choice is TWO
$ bash sh08.sh
Tell me your choice:[1-3]=>1
Your choice is ONE
$ bash sh08.sh
Tell me your choice:[1-3]=>3
Your choice is THREE
6 函數(shù)
# !/bin/bash
# Program:
# This program is used to test function
# History:
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
function myprint(){
echo -n "Your choice is "
}
read -p "Tell me your choice:[1-3]=>" choice
case $choice in
"1")
myprint;echo "ONE"
"2")
myprint;echo "TWO"
"3")
myprint;echo "THREE"
esac
exit 0
調(diào)用:
$ bash sh09.sh
Tell me your choice:[1-3]=>1
Your choice is ONE
$ bash sh09.sh
Tell me your choice:[1-3]=>2
Your choice is TWO
$ bash sh09.sh
Tell me your choice:[1-3]=>3
Your choice is THREE
7 循環(huán)
7.1 while
# !/bin/bash
# Program:
# This program shows while expression
# History:
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
while [ "$choice" != "yes" ]
do
read -p "Give your choice [yes/no]:" choice
done
exit 0
調(diào)用:
$ bash sh10.sh
Give your choice [yes/no]:no
Give your choice [yes/no]:no
Give your choice [yes/no]:nx
Give your choice [yes/no]:yes
7.2 for
# !/bin/bash
# Program:
# This program is used to demo for expression
# History:
# 2013/2/3 on_1y First release
PATH=$PATH
export PATH
for choice in 1 2 3
do
echo "your choice is $choice"
done
exit 0
調(diào)用示例:
$ bash sh11.sh
your choice is 1
your choice is 2
your choice is 3
8 shell script的追蹤與Debug
sh -n xx.sh # 語法檢查
sh -x xx.sh # 列出xx.sh的執(zhí)行過程
- Linux基礎(chǔ)知識(shí)99問(五)
- Linux基礎(chǔ)知識(shí)99問(四)
- Linux基礎(chǔ)知識(shí)99問(二)
- Linux基礎(chǔ)知識(shí)99問(一)
- Linux下PHP+MYSQL+APACHE配置過程 (摘)
- linux下安裝apache與php;Apache+PHP+MySQL配置攻略
- linux php mysql數(shù)據(jù)庫(kù)備份實(shí)現(xiàn)代碼
- linux下apache、mysql、php安裝配置詳細(xì)筆記
- linux安裝全中文管理面板教程(php+mysql)
- hi 感恩節(jié)——Linux基礎(chǔ)教程之mysql和php
相關(guān)文章
shell腳本實(shí)現(xiàn)隨機(jī)生成10個(gè)8位密碼
這篇文章主要介紹了shell腳本實(shí)現(xiàn)隨機(jī)生成10個(gè)8位密碼的方法,這里推薦給大家,有需要的小伙伴的可以參考下。2015-03-03Shell編程之/bin/bash和/bin/sh的區(qū)別淺析
在redhat的系統(tǒng)中,sh是一個(gè)到bash的軟鏈接,但是如果運(yùn)行如下程序會(huì)產(chǎn)生不一樣的結(jié)果,下面這篇文章主要給大家介紹了關(guān)于Shell編程之/bin/bash和/bin/sh的區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-07-07Linux 下mysql通過存儲(chǔ)過程實(shí)現(xiàn)批量生成記錄
這篇文章主要介紹了Linux 下mysql通過存儲(chǔ)過程實(shí)現(xiàn)批量生成記錄的相關(guān)資料,需要的朋友可以參考下2017-05-05centos中mysql備份數(shù)據(jù)庫(kù)腳本分享
這篇文章主要介紹了centos中mysql備份數(shù)據(jù)庫(kù)腳本,可以做成mysql自動(dòng)備份工具,管理網(wǎng)站一定會(huì)用的到,需要的朋友可以參考下2014-03-03詳解git無法pull倉(cāng)庫(kù)refusing to merge unrelated histories
這篇文章主要介紹了詳解git無法pull倉(cāng)庫(kù)refusing to merge unrelated histories的相關(guān)資料,需要的朋友可以參考下2017-06-06