在一些復雜的Linux維護工作中,大量重復的輸入和交互操作不但費時費力,容易出錯.這時候就需要用到腳本。
編寫腳本的好處: 批量的處理,自動化的完成維護,減輕管理員的負擔。
linux的shell腳本是一種特殊的應用程序,常見的shell解釋器有很多種,使用不同的shell時期內部指令:cat /etc/shells
[root@xiaolyu ~]# cat /etc/shells
/bin/bash是大多數linux中默認的shell解釋器。之後的所有腳本的編寫都是bash腳本。
將平時的操作命令順序的放入到文件中賦予執行權限,一次的執行。
我們來編寫第一個腳本first.sh
linux不以後綴名區分文件,為了方便記憶這裡我就以.sh為結尾
[root@xiaolyu ~]# vim first.sh
注釋:
#!/bin/bash 主要是為了聲明,我所寫的均為bash語言(我是用的是bash解釋器)
第二行為注釋行,注釋信息不生效
當寫一個比較大的腳本時,如果沒有一個好的注釋,那麼也就也就沒有人都能夠看懂其中的意思了
再往後即執行的命令。
執行過程:
[root@xiaolyu ~]# ll first.sh #查看是否具有執行權限
-rw-r--r--. 1 root root 62 Aug 30 22:58 first.sh
[root@xiaolyu ~]# chmod +x first.sh #給腳本添加執行權限
[root@xiaolyu ~]# ll first.sh #查看腳本是否具有執行權限
-rwxr-xr-x. 1 root root 62 Aug 30 22:58 first.sh
[root@xiaolyu ~]# ./first.sh #執行腳本
執行的結果:
E-執行腳本的不同方式
第一種使用絕對路徑執行
第二種使用相對路徑執行,如./的方式
第三種使用 sh命令來執行 格式 sh 腳本名 不需要執行權限 -x參數
第四種使用 . (空格)腳本名稱的方式執行 不需要執行權限 . first.sh
第五種使用 source 腳本名稱 不需要執行權限(主要用於生效配置文件)
#建議使用後三種,在生產環境中不要輕易的給文件可執行權限;
變量的定義是:可以存放一個可變的值的空間
可以通過不同的環境進行改變就是一個可以變的值.
默認情況下: 在Linux中可以將每個shell看成不同的執行環境,所以相同的一個變量名稱在不同的變量執行環境中的變量值是不同的.
常見的shell變量分類:
自定義變量、環境變量、位置變量、預定義變量
變量的輸出
一般使用echo 輸出變量 echo $變量名
舉例1:來進行定義一個變量名字為Linux值為7.2
[root@xiaolyu ~]# Linux=7.2 #為變量Linux賦值
[root@xiaolyu ~]# echo $Linux #輸出變量Linux的值
7.2
[root@xiaolyu ~]# linux=6.5 #為變量linux賦值
[root@xiaolyu ~]# echo $linux #輸出變量linux的值
6.5
可以直接在命令行定義一個變量並賦予值,通過echo進行輸出變量 $是引用變量的特殊字符(必須使用$符號)
注意:echo和調用的變量之間必須要有空格。
大小寫的變量的值是不同的。
舉例2:當需要一起調用兩組變量時
[root@xiaolyu ~]# echo $Linux $linux
7.2 6.5
直接使用echo 後面跟$調用的變量 如果有多個則空格隔開
舉例3:當變量名和後面的字符容易混淆的時候應該使用{}將變量名括起來
[root@xiaolyu ~]# echo system${Linux}
system7.2
[root@xiaolyu ~]# echo ${Linux}system
7.2system
其他的特殊操作
雙引號( " ")
當=號右邊賦值出現空格的時候,需要使用雙引號將其擴起
[root@xiaolyu ~]# webserver="nginx 1.1"
[root@xiaolyu ~]# echo $webserver
nginx 1.1
#在雙引號的范圍內還可以引用其他的變量,從而能夠將現有的變量賦值給新的變量
[root@xiaolyu ~]# Linux=7.2
[root@xiaolyu ~]# system="RHEL$Linux"
[root@xiaolyu ~]# echo $system
RHEL7.2
[root@xiaolyu ~]#
單引號( ' ')
當要賦值的內容包括"$"、"\"等,具有其他含義的特殊字符時,應使用單引號將其括起來;
在單引號范圍內將無法引用其他的值,任何字符均作為普通字符看待,但賦值 的內容包含單引號時需要使用\’符號進行轉義以免沖突.
[root@xiaolyu ~]# kernel=3.10$Linux
[root@xiaolyu ~]# echo $kernel
3.107.2 #這個結果不是我們想要的,我們想要的結果是$3.10$Linux
[root@xiaolyu ~]# kernel='3.10$Linux'
[root@xiaolyu ~]# echo $kernel
3.10$Linux
[root@xiaolyu ~]#
反撇號( ` `)
位置在鍵盤esc的下邊的按鍵。
反撇號主要使用於命令替換,允許將某個命令的屏幕輸出結果賦值給變量。
舉例: 在命令行中查找程序的詳細的信息
[root@xiaolyu ~]# rpm -qf `which pwd`
coreutils-8.22-15.el7.x86_64
[root@xiaolyu ~]# rpm -qf $(which pwd)
coreutils-8.22-15.el7.x86_64
[root@xiaolyu ~]# which pwd
/usr/bin/pwd
[root@xiaolyu ~]# rpm -qf /usr/bin/pwd
coreutils-8.22-15.el7.x86_64
[root@xiaolyu ~]#
#反撇號括起來的范圍內必須是可執行的命令。否則將會出現錯誤
需要注意的是使用反撇號難以在一條命令中實現嵌套命令的操作,這是可以$()來替代反撇號
如果使用反撇號嵌套會出錯的!!
[root@xiaolyu ~]# rpm -q `rpm -qf `which pwd``
rpm: no arguments given for query
which-2.20-7.el7.x86_64
package pwd is not installed
建議使用$()的形式嵌套
[root@xiaolyu ~]# rpm -q $(rpm -qf $(which pwd))
coreutils-8.22-15.el7.x86_64
read命令
除了上面的賦值之外還可以使用read命令進行賦值,read命令用來提示用戶輸入信息,從而實現簡單的交互式過程(其實我們所輸入的命令就是一種交互式的過程)
執行時需要從標准輸入設備鍵盤讀取一行,並以空格為分隔符
[root@xiaolyu ~]# read kernel Linux #同時定義兩個變量操作
4.7.2 7.2 -->手動輸入的變量值
[root@xiaolyu ~]# echo $kernel
4.7.2
[root@xiaolyu ~]# echo $Linux
7.2
為了交互式更加的形象,提高易用性,加上 -p選項來設置提示信息
[root@xiaolyu ~]# read -p "input your password:" passwd #-p 指定提示信息
input your password:123456 #123456就是$passwd的值
[root@xiaolyu ~]# echo $passwd #輸出變量
123456
---------------------------------------------------------------------------------------------------------------
以上的操作只是在當前的bash環境下生效,到了其他控制台或者是其他shell就不能生效了
我們進入當前shell的子shell驗證:
[root@xiaolyu ~]# echo $Linux #在當前的shell環境輸出變量
7.2
[root@xiaolyu ~]# bash #切換子shell
[root@xiaolyu ~]# echo $Linux #在子shell環境輸出變量
#沒有輸出東西。
[root@xiaolyu ~]#
也可以先定義一個全局變量並賦值:
[root@xiaolyu ~]# export website=www.baidu.com #設置全局變量
[root@xiaolyu ~]# echo $website #在當前環境輸出變量
www.baidu.com
[root@xiaolyu ~]# bash #進入子shell
[root@xiaolyu ~]# echo $website #輸出子shell中的變量
www.baidu.com
[root@xiaolyu ~]#
需要注意的是變量的名是嚴格區分大小寫的
shell腳本的數值運算多用於腳本程序的過程控制(如循環次數,使用量比較等)
在shell環境中,只能進行比較簡單的整數運算
運算符與變量之間必須有一個空各位,整數的運算主要是通過內部命令expr 命令進行運算。
格式 變量1 運算符 變量2
其中 變量1 、變量2 ……對應的需要計算的數值變量(需要$符號調用)常用的幾種運算符如下所示
加法運算:+
減法運算: -
乘法運算: \*
除法運算: /
求模(取余)運算: %
若要將運算結果賦值給其他變量可以這麼做
環境變量是指系統本身運行需要由linux系統提前創建好的一類變量。
主要用於用戶的工作環境,包括(用戶的宿主目錄,命令的查找路徑,用戶的當前目錄,登錄的終端等)環境變量的值由操作系統本身自己維護,隨著用戶的狀態改變而改變
env調取當前環境變量
環境變量的配置文件在/etc/profile(全局)
用戶宿主目錄/home/berners/.bash_profile(局部) #我非root用戶是berners.
$PWD
pwd命令就是調用了這個變量才能進行輸出
$PATH
定義命令的默認搜索路徑,我們講的mysql可執行程序優化的時候我們是直接將程序路徑寫到了這個變量中才可以再任何目錄下進行輸入.
$USER
就是當前登陸系統的用戶
$SHELL
顯示當前所用的shell
$HOME
顯示當前用戶的家目錄。一般非root用戶的家目錄都在/home目錄下,有個以當前用戶命名的目錄。root用戶家目錄在/root下。
由/etc/passwd的倒數第二個域決定
將我們所寫的腳本放到$PATH的默認搜索路徑中去
1.將/root目錄寫入到PATH的環境變量中,但是還沒有永久生效。
2.刷新一下/etc/profile 配置文件,並不會永久生效,甚至在另外一個窗口也沒有生效,只能直接修改配置文件。
3.之後/root下的可執行程序可以在任何目錄下直接執行執行不許要任何命令去執行
http://xxxxxx/Linuxjc/1154580.html TechArticle