7.1、shell簡介
7.1.1、shell是什麼
shell也是一個應用程序,它連接了用戶和Linux內核,讓用戶能夠更高效、安全、低成本地使用Linux內核,這也是shell的本質
shell也是一種腳本編程語言
7.1.2、shell能做什麼
1、連接用戶和內核
2、還能連接其他程序
3、shell還支持編程
7.1.3、shell怎麼樣連接用戶和內核
shell是通過調用內核提供的接口函數,來實現用戶與內核之間的交互
7.2、shell的主要類型
常見的shell有sh、bash、csh、ash、dash等
sh
sh是UNIX系統上標準的shell,sh是第一個流行的shell
csh
csh的語法有點類似C語言,成爲C shell
ash
一個簡單的輕量級的shell,佔用的資源少
bash
bash由GNU組織開發,保持了對sh shell的兼容,也是各種Linux發行版默認的配置的shell
查看shell
當前系統可用的shell都記錄在/etc/shells文件中
cat /etc/shells
查看shell指向哪種解釋器:
ls /bin/sh -l
如何切換sh的指向,指向到bash:
sudo dpkg-reconfigure dash
7.3、shell命令
7.3.1、進入shell的兩種方式
1、進入Linux控制檯
ctrl+Alt+Fn(1、2、3。。)
2、使用終端
7.3.2、shell命令的基本格式
命令提示符:
linux@linux-VirtualBox:~$
基本格式:
command [選項][參數]
1、使用選項:ls -l
2、使用參數:參數就是命令的操作對象 ls -l /bin/sh
3、一起使用
7.3.3、shell命令的本質
一個外部的應用程序是如何變成一個shell命令的?
shell在啓動文件中增加了一個叫做PATH的環境變量,這個變量保存了shell對外部命令的查找路徑,如果找不到對應的文件名,則直接報錯
查看PATH環境變量的值:
echo $PATH
shell的內置命令本質是一個自帶的函數
shell的外部命令本質是一個應用程序,執行外部命令就是啓動一個應用程序
7.4、shell的特殊字符
7.4.1、通配符
*:代表任意長度的字符串 ,例如:ls f *
?:代表任意的單字符
[]:代表指定的一個字符範圍 ls f[abcd] \ ls f[a-d]
*Text*
[ab-df]*
[ab-dm]?
??
7.4.2、引號
1、單引號
由單引號括起來的字符都作爲普通字符出現,特殊字符被單引號括起來後,失去原有的意義。
echo '$PATH'
$PATH
2、雙引號
雙引號屬於弱引用,雙引號內有命令、變量等,會先把變量、命令解析出來結果,然後輸出最終的結果
echo "$PWD"
/home/linux
3、註釋符
單行註釋:
直接在行的最前端加#即可
多行註釋
1、eof截止符
:<<eof 註釋代碼 eof
echo "test"
echo "test"
echo "test"
:<<eof
echo "hello"
echo "hello"
echo "hello"
eof
2、感嘆號
:<<!註釋代碼 !
3、逗號
: , 註釋代碼 ,
7.5、輸入和輸出
7.5.1、管道
將兩個或者多個命令(程序、進程)連接在一起,把一個命令的輸出作爲下一個命令的輸入
Linux下使用 | 連接多個命令,也成爲管道符
command1 | command2 [|command3...]
find ~/ | grep "test"
7.5.2、重定向
改變默認的輸出方式,可以由打印到屏幕改爲寫入文件
ls > test.txt
在輸出重定向中,>表示覆蓋,>> 表示追加
管道和重定向的區別
重定向必須是由文件來接收輸出,而管道可以由命令來接收輸出
不能嘗試:
command1 > command2 [|command3...]
7.6、shell編程
7.6.1、shell基本語法
shell變量
定義:
變量名=value
變量名='value'
變量名="value"
賦值號周圍不能有空格
使用變量:
只要在變量前加入$即可
刪除變量:
unset 變量名
7.6.2、shell程序的控制結構語句
if 條件1 then 如果條件1爲真,則執行
elif 條件2 then 2爲真,則執行
else 1、2、爲假則執行
for 變量名 in 列表
do
命令
done
while 條件
do
命令
done
7.6.3、運行shell程序的方式
1、直接執行./test.sh
需要給shell程序用戶的執行權限
chmod u+x test.sh
./test.sh
2、使用 bash test.sh
3、使用 . test.sh
執行方式 | 是否需要執行權限 | 是否以新進程運行腳本 |
---|---|---|
./test.sh | 需要 | 是 |
bash test.sh | ||
. test.sh |