歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> RHEL 6 Linux中的shell變量總結

RHEL 6 Linux中的shell變量總結

日期:2017/3/3 15:53:14   编辑:關於Linux

環境變量路徑:

[root@localhost ~]# set //查看到的是局部變量和全局變量2種

[root@localhost ~]# env //查看系統的全局環境變量

[root@localhost ~]# echo $PATH //查看系統環境變量路徑

[root@localhost ~]# export $PATH //也可以使用export查看環境變量路徑

[root@localhost ~]# export PATH=$PATH:/date/ //臨時添加/date目錄到環境變量路徑下

要想重啟主機後還生效就要編輯環境配置文件root/.bashec或/root/.bash_profile與/etc/profile文件,想要立刻生效可以使用命令:

注:.bash_profile文件支隊系統當前用戶生效

[root@localhost ~]# source .bash_profile

[root@localhost ~]# ls –a 可以查看到這2個文件

腳本的執行:

sh script //這種方法script不需要可執行權限

./ script //必須具有可執行權限

. script //這種方法script也不需要可執行權限

區分局部變量和全局變量

[root@localhost ~]# str=1000 //局部變量

[root@localhost ~]# echo $str

1000

去編輯一個腳本:

# vim bianliang.sh

#!/bin/bash

echo $str

[root@localhost ~]# bianliang.sh //我們定義的變量,但是通過腳本卻不能輸出

[root@localhost ~]# export str //添加到全局變量中

[root@localhost ~]# bianliang.sh //再次使用完全ok

1000

要想完全的清除某個全局變量:

# unset str 清除全局變量

#env 可以查看到所有全局變量

&& || 的用法:(參數的比對)

&& 條件符合要求才會執行後面的動作

|| 條件不符合要求時才會執行後面的動作

//查看/ect目錄下是否有/grub.conf文件,有則輸出yes,無則輸出no。

[root@localhost ~]# [ -f /etc/grub.conf ] && echo yes || echo no

Yes

查看/shellscripts/hello.sh是否可執行,可執行則輸入yes,否則就賦予它可執行權限

[root@localhost shellscripts]# [ -x /shellscripts/hello.sh ] && echo yes || chmod +x /shellscripts/hello.sh

[root@localhost shellscripts]# ls

hello.sh ipadd.sh logmess_clean.sh

[root@localhost shellscripts]# hello.sh

hello world!

“”和‘’與 ` ` 在shell變量中的區別

“ ” 允許通過$符引用其他變量

‘’禁止引用其他變量符,視為普通字符

`` 將命令執行的結果輸出給變量

[root@localhost ~]# echo "$PWD is lujing"

/root is lujing

[root@localhost ~]# echo '$PWD is lujing'

$PWD is lujing

[root@localhost ~]# echo $a

1000

[root@localhost ~]# echo $aaaaaaaa //系統把$aaaaa視為一個變量

[root@localhost ~]# echo ${a}aaaaaa //把變量用{}括起來,系統才會去輸出變量

1000aaaaaa

#echo `ls` 反引號中的命令時可以單獨執行的,然後再由echo輸出

擴展:”\ “反斜槓,作用屏蔽字符的特殊意義

test命令

用途:測試表達式是否成立,成立返回值為0,否返回值為其他值。

格式:test 條件表達式 [條件表達式]

≡ 常見的測試類型

測試文件的狀態

字符的串比較

整數值比較

邏輯測試

測試文件的狀態

格式:[操作符 文件或目錄]

常見的測試操作符

-d :測試是否為目錄【directory】

[root@localhost /]# [ -d /var/spool/ ]

[root@localhost /]# echo $?

0

-e:測測試目錄或文件是否存在【exist】

[root@localhost /]# [ -e /etc/passwd ]

[root@localhost /]# echo $?

0

-f:測試是否為文件【file】

[root@localhost Packages]# [ -f /etc/passwd ]

[root@localhost Packages]# echo $?

0

[root@localhost Packages]#

-r:測試當前的用戶是否有讀取的權限【read】

[root@localhost /]# [ -r /etc/shadow ]

[root@localhost /]# echo $?

0

[root@localhost /]#

-w:測試當前的用戶是否有寫的權限【write】

[root@localhost /]# [ -w /etc/shadow ]

[root@localhost /]# echo $?

0

[root@localhost /]#

-x:測試當前的用戶是否可執行和該文件【excute】

[root@localhost /]# [ -x /etc/shadow ]

[root@localhost /]# echo $?

1

[root@localhost /]# ll /etc/shadow

----------. 1 root root 1086 2月 26 22:38 /etc/shadow

-L:測試是否為符號鏈接文件【link】

[root@localhost /]# ll /etc/shadow

----------. 1 root root 1086 2月 26 22:38 /etc/shadow

[root@localhost /]# [ -L /etc/shadow ]

[root@localhost /]# echo $?

1

整數值比較

格式:[ 整數1 操作符整數2 ]

常用的操作測試符

-eq:等於(Equal)

-ne:不等於(Not Equal)

-gt:大於(Greater Than)

-lt:小於(Lesser Than)

-le:小於或等於(Lessser or Equal)

-ge:大於或等於(Greater or Equal)

案例:

如果登錄用戶數小於或等於10則輸出YES

[root@localhost 桌面]# who|wc -l

2

[root@localhost 桌面]# [ `who|wc -l` -le 10 ] && echo "YES"

YES

變量的加減法運算:

變量的加法運算:

[root@localhost ~]# a=1000

[root@localhost ~]# echo $a

1000

[root@localhost ~]# expr $a + $a

2000

[root@localhost ~]# echo $a + $a //這是2中錯誤的操作,運算必須使用expr

本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/

1000 + 1000

[root@localhost ~]# expr $a+$a //$a + $a 要有空格否則也是錯誤的

1000+1000

變量的乘法運算:

[root@localhost ~]# expr $a * $a //* 在操作系統中視為特殊字符,\屏蔽字符的特殊意義

expr: syntax error

[root@localhost ~]# expr $a \* $a

1000000

[root@localhost ~]# expr 2 / 1 //除法

2

[root@localhost ~]# expr 2 – 1 //減法

1

[root@localhost ~]# expr 2 % 1 //取余

0

位置變量:

0-9 常用的為1-9

通過腳本來看些位置變量:

[root@localhost shellscripts]# cat a.sh

#!/bin/bash

echo $1

echo $2

echo $3

echo $0

[root@localhost shellscripts]# a.sh a b c d e

a

b

c

/shellscripts/a.sh //$0打印的是腳本笨的名字

[root@localhost shellscripts]# a.sh 1 2

3

[root@localhost shellscripts]# a.sh 2 3

5

[root@localhost shellscripts]# cat a.sh

#!/bin/bash

echo `expr $1 + $2` //$1和$2代表了2個位置變量

[root@localhost shellscripts]#

預定義變量

$# : 命令行中位置參數的個數

$* : 所有位置參數的內容

$? : 上一條命令執行後返回的狀態,當狀態為0時表示正常,非0表示執行異常或出錯。

$$ : 當前所在進程的進程號

$! : 後台運行的最後一個進程號

$0 : 當前執行的進程/進程名

腳本的規范書寫:

#!/bin/bash

#Date : 2014-5-28

#Author : Create by meng //腳本的創始人

#Mail :~~ //郵件地址

#Func (do):this is useradd user script. //腳本的作用

#V1.1 //腳本的版本

echo "hello,world!" //後面的才是腳本的內容

文章版權:http://www.cnblogs.com/linux-super-meng/

字符串比較

格式 [ 字符串1 = 字符串2 ]

[ 字符串1 != 字符串2 ]

[ -z 字符串 ]

常用的測試操作符

=:字符串內容相同

!=:字符串內容不相同,!號表示相反的意思

-z:字符內容為空

#read -p "input your name: " name

root

#echo $name

#[ $name != "root"] && echo "name is erro"

##read -p "input your name: " name

zhangsan

#[ $name != "root"] && echo "name is erro"

#echo $name

文章版權:http://www.cnblogs.com/linux-super-meng/

邏輯測試

格式:[表達式1] 操作符 [表達式2]

常用的測試操作符

-a 或&&:邏輯與,“而且”的意思

#前後兩個表達式都成立是整個測試結果才為真,否則為假

(前面真則執行後面)

-o或||:邏輯或,或者的意思

#操作符兩邊至少一個為真時,結果為真,否則結果為假

(前面假則執行後面)

!:邏輯否

#當指定條件不成立時,返回結果為真

if條件語句 --單分支

當“條件成立“時執行相應的操作

if 條件測試命令 if 磁盤已用空間>80%

then 命令序列 ==》 then 報警

fi

應用案例:

如果/boot分區的空間使用超過80%,輸出報警信息

#!/bin/bash

RATE=`df |awk'NR==4{print int($5)}'`

if [$RATE -gt 80]

then

echo "warning,DISK is full!"

if

if條件語句--雙分支

當“條件成立”、“條件不成立”時執行不同的操作

if 條件測試命令 if 3306端口是否在監聽狀態

then 命令序列1 ==》 then mysqld 服務已運行

else 命令序列2 else 啟動mysqld服務

fi

引用案例:

判斷vsftp是否在運行。若已運行則輸出提示信息,否則重新啟動vsftp服務

#!/bin/bash

service vsftp status &>/dev/null

if [ $? -eq 0 ]

then

echo "vsftp service is running"

else

/etc/init.d/vsftp restart

fi

如果/boot分區的空間使用超過80%,輸出警報信息。我們來寫個腳本

#vi a.sh

#!/bin/bash

#a.sh

NUM=`df | awk 'NR==5{print int($5)}'`

if

[ $NUM -gt 80 ]

then

echo "Warning,DISK is full!"

if

awk的額外擴展

[root@localhost ~]# cat /etc/passwd | grep bash | awk -F: '{print ($1)}'

root

lenovo

[root@localhost ~]# ^C

文章版權:http://www.cnblogs.com/linux-super-meng/

for循環語句 for 收件人 in 郵件地址列表

根據變量的不通值,重復執行一組命令操作 ==》 do

for 變量名 in 取值列表 發郵件

do done

命令序列

done

#!/bin/bash

for TM in a b c d e

do

echo $TM

sleep 1

done

~

重復測試指定的條件,只要條件成立則反復執行對應的命令操作

while 命令或表達式 while 可用內存<100mb

do ==》do

命令列表 獲取可用內存數

done done

文章版權:http://www.cnblogs.com/linux-super-meng/

多重分支語句

root@localhost ~]# cat a.sh

#!/bin/bash

#a.sh

case $1 in

start)

echo "start...."

;;

stop)

echo "stop......"

;;

restart)

echo "restart........"

;;

laod)

echo "laod......."

;;

status)

echo "start....."

echo "stop......"

;;

esac

[root@localhost ~]# ./a.sh start

start....

[root@localhost ~]# ./a.sh stop

stop......

[root@localhost ~]#

[root@localhost ~]# cat a.sh

#!/bin/bash

#a.sh

read -p "input:" NUM

case "$NUM" in

[a-z]|[A-Z])

echo "it is english"

;;

[0-9])

echo "it is shuzi"

;;

*)

echo "........."

;;

esac

[root@localhost ~]#

[root@localhost ~]# ./a.sh

input:2

it is shuzi

[root@localhost ~]# ./a.sh

input:a

it is english

[root@localhost ~]# ./a.sh @

input:@

.........

[root@localhost ~]# ./a.sh

input:#

.........

[root@localhost ~]#

shift遷移語句

用於遷移位置變量,將$1~$9依次向左傳遞

[root@localhost ~]# ./a.sh 10 20

The sum is: 30

[root@localhost ~]# cat a.sh

#!/bin/bash

#a.sh

Result=0

while [ $# -gt 0 ]

do

Result=`expr $Result + $1`

shift

done

echo "The sum is: $Result"

[root@localhost ~]#

break語句

用於跳出當前的循環體,執行循環體後的語句。

函數的應用

[root@localhost ~]# ./c.sh

46

55

[root@localhost ~]# cat c.sh

#!/bin/bash

#c.sh

adder(){

echo `expr $1 + $2`

}

adder 12 34

adder 22 33

[root@localhost ~]# ./c.sh

46

55

[root@localhost ~]#

Copyright © Linux教程網 All Rights Reserved