Linux 之 shell script -- 撰寫基礎(chǔ)的shell

哈哈,貓毛終于學(xué)習(xí)到 shell script 的撰寫了。在學(xué)完基礎(chǔ)的shell之后,深刻覺得認識一些撰寫shell常用的命令以及熟悉和靈活運用變量是非常有必要的贺喝。除此之外,還要參考大師們的script宗兼,多模仿和練習(xí)(有點類似編程了哈~)躏鱼。學(xué)習(xí)過程中我把腳本信息都曬在文章里面了,希望我們共同進步~~

除了剛開始Linux -- 認識shell script中認識的echo外殷绍,這篇文章里又新學(xué)習(xí)了幾個有用的命令挠他。

  • read 讀入標(biāo)準(zhǔn)輸入
  • date 獲得時間信息(date +%Y%m%d獲取年月日)
  • bc linux系統(tǒng)中的計算器

1.撰寫簡單的shell

1.1 對談式腳本:變量內(nèi)容由用戶決定

對談式,通過與用戶“互動”完成操作篡帕。
這里是通過read -p來完成:

  • read命令用于從標(biāo)準(zhǔn)輸入讀取數(shù)值
  • -p后面跟提示信息殖侵,即在輸入前打印提示信息

舉例來學(xué)習(xí),vi showname.sh

#!/bin/bash
read -p "please input your first name:" firstname #提示使用者輸入镰烧,并定義變量${firstname}
read -p "please input your last name:" lastname #提示使用者輸入拢军,并定義變量${lastname}
echo -e "\n your full name is ${firstname} ${lastname}" #結(jié)果由屏幕輸出

1.2 隨日期變化:利用date進行文件的建立

舉例來學(xué)習(xí)

#!/bin/bash
#1.讓使用者輸入文件名,并取得fileuser這個變量:
echo -e "I will use 'touch' command to create 3 files." #顯示信息
read -p "Please input your filename:" fileuser #提示使用者輸入filename

#2.為了避免使用者隨意按Enter怔鳖,利用變量功能分析檔名是否有設(shè)定
filename=${fileuser:-"filename"} # 判斷之前是否有配置過文件名(之前“變量的測試與內(nèi)容替換”中學(xué)習(xí)過)

#3.開始利用date指令來取得所需要的文檔名
date1=$(date --date='2 days ago' +%Y%m%d) #獲取2天前的年月日信息
date2=$(date --date='1 days ago' +%Y%m%d) #獲取1天前的年月日信息
date3=$(date +%Y%m%d) 獲取今日的年月日信息
file1=${filename}${date1} # 文件名以 “filename + 日期” 決定
file2=${filename}${date2}
file3=${filename}${date3}

#4.建立文檔
touch "${file1}" #使用touch命令新建文檔
touch "${file2}"
touch "${file3}"

里面涉及到變量功能的信息茉唉,忘記了可以參考??Linux 之 Bash -- shell 的變量功能(三)

1.2 數(shù)值運算:簡單的加減乘除

這里介紹兩種計算方法:

  • (1)declare -i
    使用declare來定義變量的類型,當(dāng) 變量 定義成為 整數(shù) 后才能進行加減運算结执。
    eg: declare -i total=${firstnu}*${secnu}
  • (2)$((計算式))
    利用$((計算式))來進行數(shù)值運算度陆。
    eg: total=$((${firstnu}*${secnu}))
    這里舉例來學(xué)習(xí): vi multiplying.sh,試著寫完腳本運行一下~
#!/bin/bash
echo -e "You should input 2 numbers,I will multiplying them! \n"
read -p "first number:" firstnu
read -p "second number:" secnu
total=$((${firstnu}*${secnu}))
echo -e "\nThe result of ${firstnu} x ${secnu} is ==> ${total}"

1.3 數(shù)值運算:透過bc計算pi

bc命令是任意精度計算器語言献幔,通常在linux下當(dāng)計算器用懂傀,可以做基本的數(shù)學(xué)運算
在命令行內(nèi)直接輸入下面命令看看?
echo '1+1' | bc
echo 'scale=2; 1/5' | bc (scale就是要保留小數(shù)點下幾位數(shù)的意思)

舉例來學(xué)習(xí)蜡感,vi pi.sh

#!/bin/bash
echo -e "This program will calculate pi value. \n"
echo -e "You should input a float number to calculate pi value. \n"
read -p "The scale number (10-10000)?" checking
num=${checking:-"10"} #開始判斷是否有輸入數(shù)值
echo -e "Starting caculate pi value. Be patient."
time echo "scale=${num}; 4*a(1)" | bc -lq #4*a(1) 是bc主動提供的一個計算pi的函數(shù),scale確定小數(shù)點位數(shù)

2.script的執(zhí)行方式差異

不同的script執(zhí)行方式會造成不一樣的結(jié)果

2.1 利用直接執(zhí)行的方式來執(zhí)行script

當(dāng)使用直接指令下達或利用bash來下達腳本時蹬蚁,該script都會使用一個新的bash環(huán)境來執(zhí)行腳本內(nèi)的指令。也就是說郑兴,使用這種執(zhí)行方式時犀斋,script其實是在子程序的bash內(nèi)執(zhí)行的。
當(dāng)子程序完成后情连,在子程序內(nèi)的各項變量或動作將會結(jié)束而不會傳回到父程序中叽粹。
拿我們剛剛執(zhí)行的腳本showname.sh為例吧,我們在程序內(nèi)明明定義了兩個變量 ${firstname}${lastname},可是當(dāng)我們在程序里嘗試echo ${firstname} ${lastname}卻沒有響應(yīng)虫几。這也就說明了锤灿,當(dāng)showname.sh執(zhí)行完畢后,子程序bash內(nèi)的所有數(shù)據(jù)便被移除了持钉。

showname.sh在子程序中運作的示意圖

2.2 利用source 來執(zhí)行腳本:在父程序中執(zhí)行

我們拿剛開始學(xué)習(xí)的showname.sh腳本來舉例吧
命令行中 source showname.sh之后衡招,echo變量 ${firstname}${lastname}
截鳥哥的圖:

source showname.sh

echo 變量竟然生效了篱昔!
(這說明${firstname}${lastname}已經(jīng)不僅僅是存在于showname.sh的變量 )
這也是為什么我們不注銷系統(tǒng)每强,而要讓某些寫入~/.bashrc的設(shè)定生效時,需要使用 source ~/.bashrc而不能使用 bash ~/.bashrc州刽。
showname.sh在父程序中運作的示意圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末空执,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子穗椅,更是在濱河造成了極大的恐慌辨绊,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匹表,死亡現(xiàn)場離奇詭異门坷,居然都是意外死亡,警方通過查閱死者的電腦和手機袍镀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門默蚌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人苇羡,你說我怎么就攤上這事绸吸。” “怎么了设江?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵锦茁,是天一觀的道長。 經(jīng)常有香客問我叉存,道長码俩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任歼捏,我火速辦了婚禮握玛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甫菠。我一直安慰自己挠铲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布寂诱。 她就那樣靜靜地躺著拂苹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓢棒,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天浴韭,我揣著相機與錄音,去河邊找鬼脯宿。 笑死念颈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的连霉。 我是一名探鬼主播榴芳,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跺撼!你這毒婦竟也來了窟感?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤歉井,失蹤者是張志新(化名)和其女友劉穎柿祈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哩至,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡躏嚎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了菩貌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卢佣。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖菜谣,靈堂內(nèi)的尸體忽然破棺而出珠漂,到底是詐尸還是另有隱情,我是刑警寧澤尾膊,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布媳危,位于F島的核電站,受9級特大地震影響冈敛,放射性物質(zhì)發(fā)生泄漏待笑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一抓谴、第九天 我趴在偏房一處隱蔽的房頂上張望暮蹂。 院中可真熱鬧,春花似錦癌压、人聲如沸仰泻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽集侯。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棠枉,已是汗流浹背浓体。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辈讶,地道東北人命浴。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像贱除,于是被迫代替她去往敵國和親生闲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,381評論 0 5
  • 一勘伺,shell題記 不懂shell的程序員不是好程序員跪腹,學(xué)習(xí)shell是為了自動化褂删,使用自動化可以非常有效的提高工...
    架構(gòu)師小秘圈閱讀 8,725評論 3 70
  • 本文是對Linux shell編程的一個學(xué)習(xí)比較飞醉,共包括如下章節(jié)的內(nèi)容: 概述 基本語法 結(jié)構(gòu)化語句 函數(shù) 小結(jié) ...
    我是老薛閱讀 830評論 0 5
  • 第 2 章 SHELL 基礎(chǔ)知識2.1 shell腳本我們在上面簡單介紹了一下什么是shell腳本,現(xiàn)在我們來進一...
    LiWei_9e4b閱讀 1,571評論 0 0
  • 這是我第一次嘗試使用雙拼輸入法翻譯一篇日本的Liunx基礎(chǔ)教材上的一章屯阀。共花費一周左右缅帘。 shell的使用 前言 ...
    今後次閱讀 1,049評論 0 4