shell命令(一)

Nolinked發表於2020-04-18

什麼是shell?

Shell是一個應用程式,它連線了使用者和Linux核心,讓使用者能夠更加高效、安全、低成本地使用Linux核心,這就是Shell的本質。

shell與Linux系統關係圖

shell也能夠程式設計

  1. 有if...else選擇結構,case...in 開關語句,for、while、until迴圈
  2. 變數、陣列、字串、註釋、加減乘除、邏輯運算等概念;
  3. 函式,包含使用者自定義的函式和內建函式(例如printf\export\eval等)

shell在運維中的地位

下面手鍊形象地展示了Shell在運維工作中的地位

先看一個簡單的shell程式

#!/bin/bash
# This is to show what a example looks like.

echo "This first example"
echo # This inserts an empth line in output.
echo "We are currently in the following directory"
pwd 
echo
echo "This directory contains the following files"
ls

 註釋:

#!/bin/bash #!跟shell命令的完全路徑。作用:顯示後期命令以哪種shell來執行這些命令。如不指shell,以當前shell作為執行的shell

# shell 中以#開頭表示,整行就被當作一個註釋。執行時被忽略。

總結:

建立shell程式的步驟

第一步:建立一個包含命令和控制結構的shell檔案
第二步:修改這個檔案的許可權使它可以執行,使用chmod u+x
第三步:執行
    方法一:./{檔名}
    方法二:使用決定路徑 /root/../{檔名}
    方法三:bash {檔名}

Shell變數

變數是shell傳遞資料的一種方法。變數使用來表示每個值的符號名

例:x=1

Shell 有兩種變數:臨時變數和永久變數。

臨時變數:是shell程式內部定義的,其使用範圍僅限於定義它的程式,對於其它程式不可見。

永久變數:是環境變數,其值不隨shell指令碼的執行結束而消失。

例:如:$PATH

# 用作執行某個命令的時候,本地查詢不到某個命令或檔案,會到這個宣告的目錄中去查詢

使用者定義變數:由字母或下劃線打頭。由字母、數字或下劃線組成,並且大小寫字母意義不同。變數名長度沒有限制。

使用變數值時,要在變數名前加上字首“$”。

例如:1VAR 就是非法變數。

變數賦值:賦值號“=”兩邊應沒有空格

例如:A=123

例如:將一個命令的執行結構賦值給變數

可以利用變數和其它字元組成一個新的字串。

列出所有變數

set 

過濾

給變數賦值多個單詞

單引號和雙引號的區別

單引號之間的內容原封不動地指定給了變數,

雙引號取消了空格的作用,保留特殊符號的含義

雙引號:

單引號:

刪除變數

位置變數和特殊變數

位置變數:Shell 解釋執行使用者命令時,將命令列的第一個字作為命令名,而其它名字作為引數。由出現在命令列上的位置確定的引數稱為位置引數

特殊變數:有些變數是一開始執行Script指令碼時就會設定,且不能被修改,但我們不叫它只讀系統變數,而叫它特殊變數。這些變數當一執行程式時就有了,以下是一些特殊變數

$*:這個程式的所以引數
$#:這個程式的引數個數
$$:這個程式的PID
$!:執行上一個後臺程式的PID
$?:執行上一個指令的返回值

 程式例子:

#!/bin/bash
echo "$*  表示這個程式的所以引數"
echo "$#  表示這個程式的引數個數"
touch /tmp/a.txt

echo "$$  表示當前程式的ID"
touch /tmp/b.txt &

echo "$!  執行上一個後臺指令的PID"
echo "$$  表示程式的程式ID"

結果:

變數的使用:

#!/bin/bash

var1="abcd efg"
echo $var1

var2=1234
echo "The value of var2 is $var2"
echo $HOME
echo $PATH
echo $PWD

執行結果: