shell是使用者與linux作業系統之間溝通的橋梁,使用者可以輸入命令執行,又可以利用 shell指令碼程式設計去執行。
1.1 常見shell直譯器如下:
不同的shell語言的語法有所不同,一般不能交換使用,最常用的shell是bash,也就是bourne again shell。bash由於易用和免費,在日常工作中被廣泛使用,也是大多數linux作業系統預設的shell環境。
1.2 第乙個指令碼:
#!/bin/bash
#by lutixia
#2020-03-10
#############################
echo "hello world"
1.3 指令碼執行方式:### 方式一:
chmod +x hello.sh
./hello.sh
### 方式二:
bash hello.sh
### 方式三:
. hello.sh
ps:以上三種執行方式,第一種需要有可執行許可權,後面兩種不需要可執行許可權。前兩種是在子shell中執行,最後一種是直接在父程序執行,也就是會直接影響當前shell程序。
2.1 系統變數:
shell常見的變數之一系統變數,主要是用於對引數判斷和命令返回值判斷時使用,系統變數詳解如下:
$0 當前指令碼的名稱;
$n 當前指令碼的第n個引數,n=1,2,…9;
$* 當前指令碼的所有引數(不包括程式本身);
$# 當前指令碼的引數個數(不包括程式本身);
$? 命令或程式執行完後的狀態,返回0表示執行成功;
$$ 程式本身的pid號。
2.2 環境變數:
shell常見的變數之二環境變數,即程式執行時的環境,環境變數詳解如下:
path 命令所示路徑,以冒號為分割;
home 列印使用者家目錄;
shell 顯示當前shell型別;
user 列印當前使用者名稱;
id 列印當前使用者id資訊;
pwd 顯示當前所在路徑;
term 列印當前終端型別;
hostname 顯示當前主機名。
2.3 使用者變數:
shell常見的變數之三使用者變數,使用者變數又稱為區域性變數,主要用在shell指令碼內部或者臨時區域性使用,使用者變數詳解如下:
nginx_version=nginx-1.18.0.tar.gz 自定義變數nginx_version;
prefix=/usr/local/nginx 自定義變數prefix;
### 範例:
#!/bin/bash
#by lutixia
#2021-03-10 20:12:36
#############################
echo -e '\033[32m-----------------------------\033[0m'
pkg_name=nginx
url=
echo -e "\033[36m請選擇你的操作:\033[0m"
echo
echo "2)編譯安裝$pkg_name伺服器"
echo "3)啟動$pkg_name伺服器"
echo -e '\033[32m-----------------------------\033[0m'
if條件判斷語句,通常以if開頭,fi結尾。也可加入else或者elif進行多條件的判斷,if表示式如下:
if 條件
then
commands
fi或者:
if 條件;then
commands
else
commands
fi或者:
if 條件;then
commands
elif 條件
commands
else
commands
fi
if語句會執行if後面的那個條件(命令),如果該命令的退出狀態碼是0(該命令成功執行),位於then部分的命令就會被執行。如果該命令的退出狀態碼是其他值, then部分的命令就不會被執行,bash shell會繼續執行指令碼中的下乙個命令。
3.1 數值的比較條件:
n1 -eq n2 檢查n1是否與n2相等
n1 -ge n2 檢查n1是否大於或等於n2
n1 -gt n2 檢查n1是否大於n2
n1 -le n2 檢查n1是否小於或等於n2
n1 -lt n2 檢查n1是否小於n2
n1 -ne n2 檢查n1是否不等於n2
3.1.1 範例猜數字:#!/bin/bash
#by lutixia
#############################
num=60
read -p "請輸入你的數字:" number
if [ $number -gt $num ];then
echo "猜大了哦,再猜一次。"
elif [ $number -lt $num ];then
echo "猜小了哦,再猜一次。"
else
echo "猜中啦,真棒!"
fi
3.2 字串的比較條件:str1 = str2 檢查str1是否和str2相同
str1 != str2 檢查str1是否和str2不同
str1 < str2 檢查str1是否比str2小
str1 > str2 檢查str1是否比str2大
-n str1 檢查str1的長度是否非0
-z str1 檢查str1的長度是否為0
3.2.1 範例:#!/bin/bash
#by lutixia
#############################
read -p "請輸入你要安裝的軟體包名:" name
if [ "$name" = "nginx" ];then
yum install $name -y
elif [ -z "$name" ];then
echo "你還沒有輸入包名!"
fi
3.3 檔案的比較條件:-d file 檢查file是否存在並是乙個目錄
-e file 檢查file是否存在
-f file 檢查file是否存在並是乙個檔案
-r file 檢查file是否存在並可讀
-s file 檢查file是否存在並非空
-w file 檢查file是否存在並可寫
-x file 檢查file是否存在並可執行
-o file 檢查file是否存在並屬於當前使用者所有
-g file 檢查file是否存在並預設組與當前使用者相同
file1 -nt file2 檢查file1是否比file2新
file1 -ot file2 檢查file1是否比file2舊
3.3.1 範例#!/bin/bash
#by lutixia
#############################
if [ ! -d /usr/local/redis/ ];then
cd /usr/src/
if [ ! -f redis-5.0.5.tar.gz ];then
wget -c
fitar xf redis-5.0.5.tar.gz
cd redis-5.0.5
make prefix=/usr/local/redis/ install
fi
shell程式設計入門
shell指令碼程式不是複雜的程式,它是按行解釋的。指令碼程式總是以 bin sh 開始,它通知shell使用系統上的bourne shell直譯器。其中 符號是注釋。指令碼程式是從上到下執行的,執行指令碼前需要改變該指令碼程式的執行許可權。確保正確建立指令碼例徑,只有 這樣,指令碼程式才能正確執行...
Shell 程式設計入門
首先建立乙個檔案 在終端中輸入如下命令 vi helloworld.sh 然後按i進行命令編寫 下面這句話是必須寫的 bin sh這句話是必須寫的 bin sh a hello world echo a 下面執行的時候先得輸入 將這個許可權改為可執行檔案 chmod x helloworld.sh ...
Shell程式設計入門
目錄 shell概述 shell解析器 shell指令碼 什麼是shell指令碼 編寫shell指令碼 1 指令碼格式 2 第乙個shell指令碼 helloworld 3.指令碼的常用執行方式 第一種 採用bash或sh 指令碼的相對路徑或絕對路徑 不用賦予指令碼 x許可權 第二種 採用輸入指令碼...