亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

linux基礎之Shell Script入門介紹

2020-07-27 19:21:56
字體:
來源:轉載
供稿:網友

linux基礎之Shell Script

1 Shell Scipt
使用指令和基本程序設計結構寫成的程序,可以完成復雜的處理流程

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
其它#開始的表示注釋,注釋一般需要說明
程序功能
版本歷史
作者及聯系方式
設置好PATH變量,以便直接可以調用相應路徑下的命令
程序主體部分
exit 0 表示程序執行成功,向環境返回0
1.2 程序執行
bash $bash sh01.sh #如果用sh sh01.sh而sh又不是指向bash,那么sh01.sh內的語法就會不一致,因為用 #sh去解釋了bash語法寫的shell script,針對這個程序,如果 #$type sh #得到sh is hashed (/bin/sh) #那么會輸出-e Hello world!,而非Hello world!

復制代碼 代碼如下:

$./xxx.sh $chmod +x sh01.sh $./sh01.sh
source $ source sh01.sh

注:用bash和用source的不同在于,用bash執行時,shell script其實是在在父程序bash下新建了一個 bash子程序,這個子程序中執行,當程序執行完后,shell script里定義的變量都會隨子程序的結束而消失, 而用source執行時,是在父程序bash中執行,shell script里定義的變量都還在。

2 簡單Shell練習

2.1 例1 接收用戶輸入

復制代碼 代碼如下:

# !/bin/bash
# Program:
#       This program is used to read user's input
# Site: www.49028c.com
# 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

調用:

復制代碼 代碼如下:

$ 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

調用:

復制代碼 代碼如下:

$ bash sh03.sh
I will use 'touch' to create three files.
Please input your filename:WhoKnows
$ ls W*
WhoKnows20130201  WhoKnows20130202  WhoKnows20130203

3 判斷式
3.1 測試文件是否存在
test -e filename會根據filename是否存在返回0或1,再交由echo顯示結果:

復制代碼 代碼如下:

$ test -e sh01.sh  && echo "Exists" || echo "Not exists"
Exists
$ test -e sh0x.sh  && echo "Exists" || echo "Not exists"
Not exists

3.2 test常用選項
3.2.1 文件類型

復制代碼 代碼如下:

-e file :file是否存在
-f file :file是否存在且為文件
-d file :file是否存在且為目錄

3.2.2 權限
-r file :file是否有讀的權限

3.2.3 文件新舊比較
-nt file1 file2 : file1 是否比 file2新

3.2.4 整數,字符串,多重條件判斷
-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

調用:

復制代碼 代碼如下:

$ 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 使用[]判斷

測試文件是否存在

復制代碼 代碼如下:

$ [ -e "sh01.sh" ] ; echo $?
0
$ [ -e "sh0x.sh" ] ; echo $?
1

注意[]內空格必須有
這種方法和test的test -e "sho1.sh" ; echo $? 是一致的

4 Shell Script 參數

復制代碼 代碼如下:

# !/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

調用:

復制代碼 代碼如下:

$ 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

注:從以上程序可以看出與參數有關的預設變量如何表示

5 條件表達式

5.1 if 結構

復制代碼 代碼如下:

# !/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

調用:

復制代碼 代碼如下:

$ bash sh06.sh
Please input [Y/N]y
OK, continue
$ bash sh06.sh
Please input [Y/N]n
Oh, interupt

5.2 if else 結構

復制代碼 代碼如下:

# !/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

調用:

復制代碼 代碼如下:

$ 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 函數

復制代碼 代碼如下:

# !/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

調用:

復制代碼 代碼如下:

$ 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 循環
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

調用:

復制代碼 代碼如下:

$ 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

調用示例:

復制代碼 代碼如下:

$ 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的執行過程

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品一本久久99精品| 久久免费视频这里只有精品| 九色精品免费永久在线| 俺去了亚洲欧美日韩| 国产不卡精品视男人的天堂| 亚洲午夜av久久乱码| 国产精品久久久久久久久久三级| 国产日韩欧美91| 精品久久久久久中文字幕大豆网| 国产精品美女在线| 国产美女精品视频免费观看| 久久久久在线观看| 日韩免费在线电影| 国产69精品久久久久9999| 精品中文字幕在线2019| 国产精品xxx视频| 日韩av网站在线| 91大神在线播放精品| 国产网站欧美日韩免费精品在线观看| 91成品人片a无限观看| 日产精品久久久一区二区福利| 国产精品免费在线免费| 亚洲欧美激情精品一区二区| 欧美丝袜一区二区| 国产精品入口免费视频一| 欧美中文在线免费| 欧美裸体男粗大视频在线观看| 中文字幕精品一区二区精品| www.日韩欧美| 亚洲性xxxx| 欲色天天网综合久久| 亚洲乱亚洲乱妇无码| 在线播放国产一区二区三区| 国产精品揄拍500视频| 91精品久久久久久综合乱菊| 国产精品白丝av嫩草影院| 97视频在线观看成人| 欧美一区第一页| 日本一欧美一欧美一亚洲视频| 欧美裸体男粗大视频在线观看| 国产亚洲成av人片在线观看桃| 精品人伦一区二区三区蜜桃网站| 91色视频在线观看| 国产主播精品在线| 欧美成人精品xxx| 亚洲第一在线视频| 久久国产精品久久精品| 久久国产天堂福利天堂| 午夜精品福利在线观看| 日韩欧美a级成人黄色| 国产91精品久| 亚洲尤物视频网| 欧美性猛交xxxxx免费看| 亚洲欧美成人精品| 欧美高清视频在线观看| 97视频在线免费观看| 国产精品一二三在线| 一本一本久久a久久精品综合小说| 国产999精品久久久影片官网| 日韩精品亚洲元码| 91禁国产网站| 国产精品视频男人的天堂| 亚洲激情视频在线观看| 国产精品ⅴa在线观看h| 亚洲一级黄色av| 欧美一区在线直播| 亚洲精品久久久久中文字幕二区| 久久久久久美女| 亚洲男人天堂2024| 日韩美女免费视频| 九九精品在线播放| 精品国产一区二区三区久久久| 久久精品影视伊人网| 久久人体大胆视频| 中文字幕欧美精品日韩中文字幕| 国产精品成人播放| 欧美精品激情blacked18| 国产91网红主播在线观看| 亚洲成年网站在线观看| 欧美在线视频在线播放完整版免费观看| 国产成人精品免高潮在线观看| 中文字幕成人在线| 久久久成人的性感天堂| 亚洲国产精品99| 亚洲精品在线91| 亚洲电影免费观看高清完整版在线| 久久久久久久电影一区| 91网站在线看| 午夜精品一区二区三区在线视频| 91精品国产电影| 92国产精品久久久久首页| 亚洲欧美综合图区| 亚洲人成在线观看网站高清| 不卡av电影在线观看| 久久综合久中文字幕青草| 97精品国产91久久久久久| 日本一区二三区好的精华液| 欧美肥臀大乳一区二区免费视频| 中文字幕最新精品| 国产mv久久久| 夜夜狂射影院欧美极品| 97色在线播放视频| 日韩美女激情视频| 亚洲欧美日韩在线一区| 91干在线观看| 欧美电影在线观看网站| 国产一区二区欧美日韩| 色妞色视频一区二区三区四区| 2019中文在线观看| 黑人精品xxx一区| 91精品国产91久久久久福利| 国产精品视频白浆免费视频| 国产91精品青草社区| 97视频免费观看| 欧美亚洲一级片| 国产区精品在线观看| 欧美电影在线免费观看网站| 国产精品成人观看视频国产奇米| 91av免费观看91av精品在线| 欧洲成人免费视频| 久久精品国产欧美激情| 免费91麻豆精品国产自产在线观看| 日韩美女视频在线观看| 欧美性videos高清精品| 成人高h视频在线| 日韩免费观看视频| 亚洲精品乱码久久久久久按摩观| 国产一区二区黑人欧美xxxx| 亚洲精品久久久久久久久| 欧美香蕉大胸在线视频观看| 久久91超碰青草是什么| 日韩久久免费视频| 97福利一区二区| 岛国视频午夜一区免费在线观看| 91精品国产综合久久久久久久久| 欧美大尺度在线观看| 亚洲激情视频网站| 国产美女久久久| 久久久99免费视频| 亚洲成人av在线播放| 国产亚洲一区二区在线| 欧美wwwwww| 少妇激情综合网| 欧美国产精品日韩| 91精品国产综合久久香蕉的用户体验| 在线看国产精品| 26uuu久久噜噜噜噜| 福利一区福利二区微拍刺激| 国产精品久久久久久久天堂| 亚洲欧美中文在线视频| 久久99精品久久久久久噜噜| 中文字幕亚洲综合久久筱田步美| 国产精品久久久久久久久免费看| 国产美女扒开尿口久久久| 精品久久久在线观看| 热99久久精品| 精品久久久久久久大神国产| 青草青草久热精品视频在线网站| 欧美在线视频一二三| 国产精品电影网| 国产免费一区二区三区香蕉精| 国产午夜精品久久久| 美女撒尿一区二区三区| 久久99国产综合精品女同|