shell介紹
- 什麼是shell
與Linux交互的命令行界面
內圓描述了操作系統的核心(比如 LinuxKernel ),而 Shell 和 GUI 一樣作爲用戶和操作系統之間的接口。
Shell 作爲一種用戶接口,它實際上是一個能夠解釋和分析用戶鍵盤輸入,執行輸入中的命
令,然後返回結果的一個解釋程序(Interpreter,例如在 linux 下比較常用的 Bash )該解釋程序不僅能夠解釋簡單的命令,而且可以解釋一個具有特定語法結構的文件,這種文
件被稱作腳本(Script)。
- 常用shell
bash - 如何查看自己的默認shell
可以直接輸入env
查看SHELL
也可以打印SHELL
變量來查看
root@DESKTOP-QRQH8GS:~# env | grep SHELL
SHELL=/bin/bash
root@DESKTOP-QRQH8GS:~# echo $SHELL
/bin/bash
- 如何更換shell
終端命令:chsh -s /bin/bash
chsh == change shell
shell編程
hello world
#!/bin/bash -v
# test.sh
echo "Hello, World"
#!/bin/bash -v
- 該行告訴操作系統使用用 #! 符號之後面的解釋器以及相應的參數來解釋該腳本文件
-v
剛好就是要打印程序的源代碼
shell數值運算常用範例
給變量自動加一
$ i=0;
$ ((i++))
$ echo $i
1
$ let i++
$ echo $i
2
$ expr $i + 1
3
$ echo $i
2
$ echo $i 1 | awk '{printf $1+$2}'
3
如果進行乘法運算,需要對運算符進行轉義,否則 Shell 會把乘號解釋爲通配符,導致語法錯誤
(())
的運算效率最高。而let
作爲 Shell
內置命令,效率也很高,
但是 expr
, bc
, awk
的計算效率就比較低。所以,在 Shell 本身能夠完成相關工作的情
況下,建議優先使用 Shell 本身提供的功能。但是 Shell 本身無法完成的功能,比如浮點運
算,所以就需要外部命令的幫助。另外,考慮到 Shell 腳本的可移植性,在性能不是很關鍵的
情況下,不要使用某些 Shell 特有的語法。
用 Shell 的內置命令查看各個命令的類型如下:
$ type type
type is a shell builtin
$ type let
let is a shell builtin
$ type expr
expr is hashed (/usr/bin/expr)
$ type bc
bc is hashed (/usr/bin/bc)
$ type awk
awk is /usr/bin/awk
從1加到某數
#!/bin/bash
# calc.sh
i=0;
while [ $i -lt 10000 ]
do
((i++))
done
echo $i
求模
$ expr 5 % 2
1
$ let i=5%2
$ echo $i
1
$ echo 5 % 2 | bc
1
$ ((i=5%2))
$ echo $i
1
求冪
$ let i=5**2
$ echo $i
25
$ ((i=5**2))
$ echo $i
25
$ echo "5^2" | bc
25
進制轉換
進制轉換也是比較常用的操作,可以用 Bash
的內置支持也可以用bc
來完成,例如把 8 進
制的 11 轉換爲 10 進制,則可以:
$ echo "obase=10;ibase=8;11" | bc -l
9
$ echo $((8#11))
9
上面都是把某個進制的數轉換爲 10 進制的,如果要進行任意進制之間的轉換還是 bc
比較
靈活,因爲它可以直接用 ibase
和 obase
分別指定進制源和進制轉換目標。