關(guān)于shell編程1

shell是用戶和內(nèi)核進行交互的一種接口? shell稱為bash shell

shell 也是一門編程語言《解釋型編程語言》? 解釋型語言還有拍黃片——PHP 等(所以PHP是世界上最好的語言)

shell腳本——就是在用Linux的shell命令編程

一個系統(tǒng)存在多個shell 可以通過 cat /etc/shells 查看系統(tǒng)中安裝的shell 不同的shell可能支持的命令語法是不相同的

第一個小實例:

--------------------------------------

while true

do

echo "i love u"

sleep 0.5

date

done

--------------------------------------

vi hello.sh

#!/bin/bash

echo "hello world"

執(zhí)行腳本 sh hello.sh

--------------------------------------

說明:系統(tǒng)執(zhí)行文件首先從環(huán)境變量中找 但是沒有配置到環(huán)境變量中? 所有執(zhí)行當前這個sh? 要先加./

用./hello.sh? 時出現(xiàn)權(quán)限不夠? chmod +x hello.sh 將這個文件添加執(zhí)行權(quán)限就可以了

./需要執(zhí)行權(quán)限

sh不需要,sh是個軟鏈接,它可能是一個任意的shell,通常默認是bash shell

用type命令可以查看

./執(zhí)行調(diào)用的是你開頭一行定義的shell,不指定系統(tǒng)會調(diào)用默認shell程序

--------------------------------------

linux shell 中的變量分為 系統(tǒng)變量和用戶自定義變量

可以通過set命令查看

----------------------------------------

自定義變量

語法:

變量=值(注意等號兩邊不能有空格,Java中的習慣還是別帶過來的好)

變量名稱一般都用大寫 (約定俗稱,不然估計要被前輩說道)

使用變量:前面加一個$

值可以不加單雙引號 也可以加雙引號 也可以加單引號

不加:不能用空格 特殊字符

加雙引號:僅使空格脫意義 ——測試中發(fā)現(xiàn)\n \t等會原樣輸出 但是用了$str 就會輸出這個變量的值(這里我也不是很清楚,沒有具體查證,有讀者知道的話可以留言或私信告訴我一下)

加單引號:會將所有的特殊字符脫意

e.g. 要輸出 hello worlds is great

STR="hello world"

echo "${STR}s is great"

unset A 撤銷變量 A

readonly B=2? 聲明靜態(tài)變量 B=2? 不能unset

vi a.sh

#!/bin/bash

A=aaaaa

echo "in a.sh,$a"

sh b.sh

vi b.sh

#!/bin/bash

echo "in b.sh,$a"

sh a.sh

結(jié)果:

in a.sh,aaaaa

in b.sh,

分析:ssh 產(chǎn)生了一個 a.sh的子進程 a.sh中又產(chǎn)生了一個b.sh的子進程

a.sh 中定義的變量在ssh 和 b.sh中是沒有的

解決:#!/bin/bash

export A=aaaaa

echo "in a.sh,$a"

sh b.sh

完美? 變量A就變成了全局變量(不過只是子進程中的全局變量? 在ssh中還是沒有的 子進程空間只能訪問父進程中用export定義的變量? 一個shell進程無法將自己定義的變量提升到父進程空間中)

不過還有一種解決辦法? sh b.sh? 換成source /*/*/b.sh? 就可以完美解決不能全局變量的問題? source就是將b.sh在a.sh的進程空間中執(zhí)行 所以可以引用到變量

還有一個反引號的用法(將命令的運行結(jié)果賦給一個變量? 反引號相當于 $()? 可以根據(jù)習慣自由選擇)

DATE=`date +%Y-%m-%d --date='-1day'`

echo $DATE

輸出前一天的日期

特殊變量:

$? 表示上一個命令退出時的狀態(tài)

$$ 表示當前進程編號

$0 表示當前的腳本名稱

$n 表示n位置的輸入?yún)?shù)(n>=1)

$# 表示參數(shù)的個數(shù) 常用于循環(huán)

$* $@ 都表示參數(shù)列表("$*" 將所有參數(shù)作為一個整體 "$@"會將各個參數(shù)分開)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一,shell題記 不懂shell的程序員不是好程序員,學習shell是為了自動化,使用自動化可以非常有效的提高工...
    架構(gòu)師小秘圈閱讀 8,787評論 3 70
  • 一、shell腳本介紹 1.1 開頭(環(huán)境使用shebang機制) #!/bin/bash 必須寫在文件首行 符號...
    優(yōu)果馥斯閱讀 3,605評論 0 1
  • 第一節(jié) Shell概述 1.Shell是什么 Shell是一個命令行解釋器,它為用戶提供了一個向Linux內(nèi)核發(fā)送...
    littlexjing閱讀 2,146評論 0 1
  • 為何叫做 shell ? shell prompt(PS1) 與 Carriage Return(CR) 的關(guān)系?...
    Zero___閱讀 3,329評論 3 49
  • 【程序23】題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數(shù),他說比第3個人大2歲。...
    Xplorist閱讀 195評論 0 0

友情鏈接更多精彩內(nèi)容