shell 基礎知識

2021-09-05 11:55:55 字數 2009 閱讀 5407

一、什麼是shell

shell是linux的一外殼,它包在linux核心的外面,為使用者和核心之間的互動提供了乙個介面

當使用者下達指令給作業系統的時候,實際上是把指令告訴shell,經過shell解釋,處理後讓核心做出相應的動作

系統的回應和輸出的資訊也由shell處理,然後顯示在使用者的螢幕上

二、什麼是shell指令碼

簡單的說,當命令或者程式不在命令列執行,而是通過乙個程式檔案來執行,這個程式就被稱為shell指令碼也就是在shell指令碼裡內建了多條命令,語句,迴圈控制,然後將這些命令一次性執行完畢,這種通過檔案執行命令的方式稱為非互動式

三、檢視系統預設shell

[root@localhost ~]# cat /etc/passwd | head -1

root: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

四、指令碼開發規範

乙個完整的shell指令碼需要有以下幾個部分:

指令碼名:最好以.sh結尾

第一行:#!/bin/bash

指定直譯器:由哪個程式來執行指令碼內容

#!:幻數

注意:#!/bin/bash必須寫在第一行,否則會被認為是注釋

有使用者判斷,否則任何使用者都可以執行這個指令碼

有流程控制,否則只是把簡單的命令進行順序操作,沒有成功與否的判斷

注釋:可以命令後,也可以自成一行

五、 指令碼執行方法

sh script.sh | bash script.sh

沒有執行許可權時

[root@localhost ~]# sh log.sh 

logs cleaned up...

12

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...12

3456

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

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...