shell是linux的一外殼,它包在linux核心的外面,為使用者和核心之間的互動提供了乙個介面
當使用者下達指令給作業系統的時候,實際上是把指令告訴shell,經過shell解釋,處理後讓核心做出相應的動作
系統的回應和輸出的資訊也由shell處理,然後顯示在使用者的螢幕上
簡單的說,當命令或者程式不在命令列執行,而是通過乙個程式檔案來執行,這個程式就被稱為shell指令碼
也就是在shell指令碼裡內建了多條命令,語句,迴圈控制,然後將這些命令一次性執行完畢,這種通過檔案執行命令的方式稱為非互動式,乙個最簡單的指令碼其實就是將一連串系統命令儲存在乙個檔案中。最起碼,它能幫 你省下重複輸入這一連串命令的功夫。
適合處理作業系統底層的業務,有眾多系統命令為其做支撐(還有文字處理三兄弟grep,sed,awk)
適合處理純文字檔案,linux中許多服務配置檔案,啟動指令碼,都是純文字(httpd,nfs,mysql,nginx,lvs)
linux系統指令碼用shell開發更簡單
在開發階段使用shell指令碼建立應用原型是十分有用的
三種方式:
[root@localhost ~]# cat /etc/passwd | head -
1root:x:0:
0:root:
/root:
/bin/bash
[root@localhost ~]# grep root /etc/passwd
root:x:0:
0:root:
/root:
/bin/bash
operator:x:11:
0:operator:
/root:
/sbin/nologin
[root@localhost ~]# echo $shell
/bin/bash
vim 01.sh #寫乙個指令碼(檔名必須以.sh結尾)
#!/bin/bash #指定shell程式的直譯器
echo
"hello shell!"
#這是一條輸出語句
沒有執行許可權時
[root@localhost ~]# sh log.sh
logs cleaned up...
2.path/script.sh | ./script(要在指令碼的當前目錄下)
絕對路徑,需要給指令碼新增執行許可權
[root@localhost ~]
# /root/log.sh
-bash: /root/log.sh: permission denied ##沒有執行許可權時,不可執行
[root@localhost ~]
# chmod +x log.sh
[root@localhost ~]
# /root/log.sh ##新增許可權後正常執行
logs cleaned up...
3.source script.sh | . script.sh
這種方式會使用source或.號來讀入指定shell檔案,並會把其他shell中的變數值或函式返回給父shell繼續使用
前兩種方式,在執行指令碼的時候,會預設開啟乙個新的shell,而新shell的變數值和函式不會返回給父shell
[root@localhost mnt]
# vim test.sh
#!/bin/bash
username=
`whoami
`[root@localhost mnt]
# sh test.sh
[root@localhost mnt]
# echo $username ##無返回值
[root@localhost mnt]
# source test.sh
[root@localhost mnt]
# echo $username ##有返回值
root
指令碼執行的方式豐富
which命令:查詢sh命令的完整路徑
具體功能:
which命令用於查詢並顯示給定命令的絕對路徑, 環境變數$path中儲存了查詢命令時需要遍歷的目錄。
which指令會在環境變數 $path設定的目錄裡查詢符合條件的檔案。 使用which命令,就可以看到某個系統命令是否存在,
以及執行的到底是哪乙個位置的命令。
read命令來從標準輸入中讀取使用者輸入的資料
$(佔位符)表示變數
#!/bin/bash
# 從終端讀取使用者輸入的資料 並賦值給preson變數
# read命令來從標準輸入中讀取使用者輸入的資料
SHELL 基礎知識
1 什麼是shell?shell的本意是 殼 的意思,其實已經很形象地說明了shell在linux系統中的作用。shell就是圍繞在linux核心之外的乙個 殼 程式,使用者在作業系統上完成的所有任務都是通過shell與linux系 統核心的互動來實現的。shell本身是乙個c語言編寫的程式,是使用...
shell 基礎知識
預設變數 傳入指令碼的命令列引數個數 所有命令列引數值,在各個引數值之間留有空格 0 命令本身 shell檔名 1 第乙個命令列引數 2 第二個命令列引數 區域性變數 在變數首次被賦值時加上local 關鍵字可以宣告乙個區域性變數,例s3 bin bash hello var1 echo hello...
shell 基礎知識
預設變數 傳入指令碼的命令列引數個數 所有命令列引數值,在各個引數值之間留有空格 0 命令本身 shell檔名 1 第乙個命令列引數 2 第二個命令列引數 區域性變數 在變數首次被賦值時加上local 關鍵字可以宣告乙個區域性變數,例s3 bin bash hello var1 echo hello...