shell基礎
一、shell是什麼
自然界
shell: (蛋、堅果、某些種子和某些動物的) 殼; 殼狀物; 炮彈;
計算機
在電腦科學中,Shell俗稱殼(用來區別於核),是指“為使用者提供操作介面”的軟體(命令解析器)。它類似於DOS下的command.com和後來的cmd.exe。它接收使用者命令,然後呼叫相應的應用程式。(摘自百度百科)
Shell 是一個應用程式,它連線了使用者和 Linux 核心,讓使用者能夠更加高效、安全、低成本地使用 Linux 核心,這就是 Shell 的本質。圖形化介面和命令列都是shell(w3c菜鳥教程)
二、bash shell和shell的區別
1、我們平時所說的shell為bash shell,為sh shell的升級版。
2、shell和bash shell 的關係, 舉個例子: shell為一系列瀏覽器,而bash shell為谷歌瀏覽器,bash shell為當前最流行的shell,如果沒有特指,我們平常所說的shell就預設指的是bash shell。
3、cat /etc/shells 檢視當前計算機已經安裝的shell,shell就像一個軟體,可以安裝新的,可以解除安裝舊的,也可以切換,echo $SHELL檢視當前選中的shell。
4,bash 沒有提供類似java,python的類庫和模組,它只能呼叫本系統的命令,所以嚴格來說:shell就是一堆命令的堆積,它不算是一門程式語言,因為每一個機子所安裝的shell有可能不同,比如centsos6 的有些命令在centos 7 上可能就有變化,所以它也不是跨平臺的語言。
三、特性
面向過程程式設計: c,python、bash 等等
面向物件:java、 c++、python 等等
bash完全為面向過程。
四、變數
1、bash shell(以下全部簡稱shell),定義變數預設全是str型別。
name=liuwf
name="liuwf"
age=18
注意,等號之間不要加空格,別問為什麼,就是這個規定的
2、export name=liuwf(定義全域性變數),還有其他很多方式定義全域性變數,有興趣可以去了解。
3、unset 刪除變數,ps. unset name(注意:bash沒有提供java python型別的垃圾銷燬機制,必須手動回收物件,否則時間長了會佔滿記憶體)
4、nums=(29 100 13 8 91 "ererer") 弱型別, 所以在一個數組中可存放任意型別
5、字串操作
1、拼接字串: str1=$name$url
2、echo ${name:1:2} 擷取字串
3、${#str} 獲取字串長度
6、位置引數
1、$0 代表命令本身, $1-$9代表順序引數編號,大於10的話使用括號,如${10}
2、 $* 把所有引數當作整體 $@ 把每個引數分開對待(它倆的功能一致,都是獲取全部變數)
3、$# 引數的個數
4、$?獲取上一個命令執行是否失敗,失敗返回非0
7、shebang機制
”Shebang”或者”Sha-bang”。長期以來,Shebang都沒有正式的中文名稱。Linux中國翻譯組的GOLinux將其翻譯為“釋伴”,即“解釋伴隨行”的簡稱,同時又是Shebang的音譯。(摘自w3c教程),如果非要問shebang漢字怎麼寫的話(這種人一律按照sb處理)。
ps.
#!/bin/bash
#!/bin/python
8、邏輯運算
&& 短路與
|| 短路或
!非
ps. ls /opt && echo "success" || echo "failure" 這行命令會列印success, 因為 ls /opt && echo "success"為真, 所以直接導致echo "failure" 不會執行。
9、運算
介紹最常見的一種:
(())
ps. i=1, j=2,echo k=$(($i+$j)) 列印結果為k=3
還有其他很多種運算的方式,有興趣可以自己去了解。
10、執行順序控制(此處只介紹if)
if condition
then
statement(s)
fi
ps.
read a read b if (($a==$b)) then echo "a和b相等" fi
11、 迴圈
for((exp1; exp2; exp3))
do
statements
done
ps.
sum=0 for ((i=1; i<=100; i++)) do ((sum += i)) done echo "The sum is: $sum"
12、函式
function_name () {
list of commands
}
ps.
Hello () { echo "Hello World $1 $2" return 10 } Hello liuwf Ail echo $?
注意:1、shell的 函式引數是以位置變數的形式傳參的。
2、shell並非python,沒有強制縮排。
13、最後舉個栗子
列印一下九九乘法表
1 ######################################################################### 2 # File Name: test.sh 3 # Author: liuwf 4 # mail: [email protected] 5 #Created Time:Mon 10 Aug 2020 06:48:38 PM CST 6 ######################################################################### 7 #!/bin/bash for i in `seq 1 9` do for j in `seq $i` do echo -n "$i*$j=$[i*j]" done echo done
列印結果見下圖: