date; who
兩個指令一起運作 ,who輸出目前是誰登入了系統
#!/bin/bash
建立腳本時,必須在檔案第一行指定要使用的shell,shell不會解釋#開頭的行,除了第一行
執行腳本
./test.sh
要求将檔案的執行權限加上(
chmod u+x test.sh
)
sh test.sh
可以直接執行
顯示消息
echo this is a test
不加任何引号可以列印this is a test
echo " this is a new test 'hahaha' "
echo可以用單引号或者雙引号來劃定字元串,文本用了一種引号,則劃定字元串需要另外一種引号
echo -n "haha:"
date
pwd
-n
可以将echo的下一個指令輸出拼接在目前輸出後面
echo " i have \$15 , i am a richer, hahaha"
反斜杆表示轉義,一般變量引用的時候用
$name
或者
${name}
使用者變量
*
由字母,數字,下劃線組成的字元串,長度不超過20
*
用等号指派,變量,等号,值之間不可以有空格!!!
*
shell腳本會自動決定變量的資料類型,腳本中的變量如果不經過修改,會保持值
*
引用變量的時候需要用美元符$,指派的時候不需要
指令替換 – shell中最有用的特性之一
- 反引号字元(`)
- $() 格式
today=$(date)
變量名,等号,值之間沒有空格, shell會運作替換符号中的指令,并将指令輸出結果賦給變量
today=$(date +%y%m%d)
date的格式化輸出1
*
指令替換會建立一個子shell來運作指令,子shell執行的指令是無法使用腳本中建立的變量的(此處不明白,試過是可以使用的)
輸出重定向
>
将指令的輸出發送到一個檔案中,覆寫檔案原有内容(全覆寫)
>>
追加資料到檔案中
輸入重定向
<輸入重定向将檔案的内容重定向到指令
wc < a.txt
文本計數,在指令行上,指令總是在最左側,而重定向符号指向資料流動方向
<<
内聯輸入重定向,将資料輸入即可
wc << EOF
>test1
>test2
>test3
>EOF
EOF 為标記,表示輸入内容的開始和結束,标記可以為任意字元,前後比對即可
管道
command1 | command2
Linux實際是同時運作這兩條指令,第一個指令産生輸出的同時,輸出會立即送給第二個指令,資料傳輸不會用到任何檔案和緩沖區
rpm -qa | sort | more
生成系統上安裝的包的list并排序後分頁檢視
expr指令
expr 1 + 5
該指令允許在指令行上處理數學表達式
expr
能夠識别少數的數學和字元串操作
expr的一些操作詳見該文章: 看示例
https://blog.csdn.net/guhong5153/article/details/6542995
使用方括号
var1=$[1 + 2]
将數學運算的結果給變量: 用美元符和方括号代替expr
var1=$[$var2 * $var3]
在腳本中使用變量,不用擔心 * 号,shell知道不是通配符
*
bash shell 的數學運算符隻支援整數運算
浮點的解決方案
bc
bash 電腦,能夠識别數字,變量,注釋,表達式,程式設計語句,函數
bc -q
不顯示bash電腦冗長的歡迎資訊
quit
退出電腦
scale=4
内建變量控制浮點數的位數,預設為0
print
允許在bc中列印變量和值
在腳本中使用bc
var1=$(echo " scale=4; 3.44/5 " | bc)
echo $var1
使用内聯輸入重定向
var5=$(bc << EOF
scale = 4
a1 = (var1 * var2)
b1 = (var3 * var4)
a1 + b1
EOF
)
退出腳本
0~255退出狀态碼
$? 儲存上個已執行指令的退出狀态碼
狀态碼 | 描述 |
---|---|
指令成功結束 | |
1 | 一般性未知錯誤 |
2 | 不适合的shell指令 |
126 | 指令不可執行 |
127 | 沒找到指令 |
128 | 無效的退出參數 |
128+x | 與Linux信号x相關的嚴重錯誤 |
130 | 通過Ctrl+C終止的指令 |
255 | 正常範圍之外的退出狀态碼 |
預設情況,
shell
腳本以腳本最後一個指令的退出碼狀态退出
exit n
可以自己指定一個退出碼
exit $var1
在exit指令中使用變量
退出碼隻能是
0~255
,超過則對
256
取餘