shell學習筆記(二)shell變量與運算符目錄:正則表達式
====================================================shell
本地變量—局部變量
本地變量—局部變量
變量替換
位置變量
標準shell變量
特殊變量
影響變量的命令
引號
運算符
位運算符
邏輯運算符
關係(條件)運算符
賦值運算符
表達式替換
運算符的優先級bash
====================================================app
變量可分爲兩類:局部變量和環境變量。局部變量只在建立它們的shell中可用。而環境變量則能夠在建立它們的shell及其派生出來的任意子進程中使用。有些變量是用戶建立的,其餘的則是專用shell變量
ide
變量名必須以字母或下劃線字符開頭。其他的字符能夠是字母、數字(0~9)或下劃線字符。任何其餘的字符都標誌着變量名的終止。名字是大小寫敏感的。給變量賦值時,等號周圍不能有任何空白符。爲了給變量賦空值,能夠在等號後跟一個換行符。建立一個局部變量最簡單的格式是給一個變量賦值
函數
本地變量—局部變量
只限於如今的shell
設置變量 eg: viong=「123」
echo $viong
Set 查看本地變量
Readonly 查看只讀變量
Unset viong 清除變量
環境變量—全局變量
全部用戶進程
Export 設置環境變量 eg:export viong=「123」
Env 查看環境變量 也能夠直接執行export
修改環境變量目錄 /etc/profile
變量替換
variable
['vεəriəbl]
變量
value
['vælju:]
值
variable
是經過
echo
顯示出來
${ variable name}
${ variable name:+value}
若是設置了
variable name
,則顯示其值,不然爲空
${ variable name:?Value}
若是未置了
variable name
,則顯示用戶定義錯誤信息
${ variable name:-value}
若是未置了
variable name
,則顯示其值
${ variable name:= value}
若是未置了
variable name
,則設置其值並顯示
eg
:
export viong=
「
123
」
echo ${viong:+」5」} 5
echo ${viong1:+」5」}
爲空
echo ${viong1:?」no defined」} no defined
echo ${viong1:=」5」} 5
而且把
viong1=
「
5
」
位置變量
位置變量有10個 從$0-$9
其中$0是顯示腳本名字
Eg:[root@viong_app1 soft]#
cat find.sh
#!/bin/bash
#find
find / -name $1 -print
[root@viong_app1 soft]#
./find.sh soft
/root/soft
/usr/src/kernels/2.6.18-194.el5-x86_64/include/config/vgacon/soft
/usr/src/kernels/2.6.18-194.el5-x86_64/include/config/soft
標準shell變量
(
大寫)
Bash默認設置了,會自動解析
EXINIT 定義初始化VI
HOME 主目錄
IFS
字行頁之間分割 默認是用空格
LOGNAME 登陸名
MAIL
標準用戶郵箱存儲的位置
MAILCHECK 檢查郵箱的時間間隔
MAILPATH 多個郵箱的時候顯示路徑
TERM 終端類型
PATH 可執行文件的路徑
TZ
表示時區
PS1 登陸系統提示符
eg:[root@viong_app1 soft]#
PS1='[\u@\h \W]\$ '
‘[ \u 用戶名@\h 主機名字 \W當前目錄]\$’ ROOT登陸是#提示符
其它用戶是$提示符
ps2 在一行上面運行多個命令的時候 會有「>「提示符
PWD 查看當前目錄
特殊變量
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示全部向腳本傳遞的參數,與位置變量不一樣,此選項參數可超過9個
$$
腳本運行的當前進程ID
號
$! 後臺運行的最後一個進程的進程ID號
$@ 與$*相同,可是使用時加引號,並在引號中返回每一個參數
$- 顯示shell使用的當前選項,與set命令功能相同
$?
顯示最後命令的退出狀態,0
表示沒有錯誤,其它任何值代表有錯誤
eg:
[root@viong_app1 soft]#
cat find.sh
#!/bin/bash
#find
find / -name $1 -print
echo "$2"
echo "$3"
echo "$#"
echo "$*"
echo "$$"
echo "$?"
[root@viong_app1 soft]#
./find.sh soft viong lin
/root/soft
/usr/src/kernels/2.6.18-194.el5-x86_64/include/config/vgacon/soft
/usr/src/kernels/2.6.18-194.el5-x86_64/include/config/soft
viong
lin
3
soft viong lin
11349
0
影響變量的命令
declare
-設置或顯示變量
-f 只顯示函數名
-r 建立只讀變量
-x 建立轉出變量
-i 建立整數變量
使用+替代-,能夠顛倒選項的含義,可是沒法顛倒-r參數
能夠經過export或者readonly查看獲取 readonly一旦設置沒法刪除及更改
想刪除只讀變量,只有重啓系統才能自動取消
export
-- 直接加實參
-f 代表在「名-值「對中的名字是函數名
-p 顯示全局變量列表
-n 把全局變量轉換成局部變量,換句話說,命令的變量再也不傳給shell
readonly 把變量設置爲只讀狀態,一旦設置沒法更改
set
設置或者重設變量的定義
unset 取消變量的定義,但不能取消shell環境中刪除指定的變量和函數 PATH PS1
shift[n] 用於移動位置變量,調整位置變量,使$3的值賦予$2,$2的值賦予$1
[root@viong_app1 soft]#
cat find.sh
#!/bin/bash
#find
find / -name $1 -print
echo "$2"
echo "$3"
ech0 "4"
echo "$#"
echo "$*"
echo "$$"
echo "$?"
shift
echo "$2" /顯示至關於$3
echo "$3" /顯示至關於$4
[root@viong_app1 soft]#
./find.sh soft viong lin lee
/root/soft
/usr/src/kernels/2.6.18-194.el5-x86_64/include/config/vgacon/soft
/usr/src/kernels/2.6.18-194.el5-x86_64/include/config/soft
viong
lin
./find.sh: line 6: ech0: command not found
4
soft viong lin lee
11364
0
lin
lee
typeset 用於顯示或者設置變量 與declare是同義詞
引號
雙引號
可引用除了字符$, `
(反引號), \
外的任意字符或字符串
eg:
echo viong *
與echo 「viong *」
[root@viong_app1 soft]#
echo -e "viong5,$HOME '\n* lin`echo viong3`"
viong5,/root '
* linviong3
'\n
是單引號\n
由於符合比較小難辨別
\n
表明回車
單引號會將引號裏的全部字符,包括引號都做爲一個字符串,如前面加 –e 轉移字符 後面\n會被定義爲回車換行
eg:
[root@viong_app1 soft]#
echo -e 'viong5,$HOME \n* lin`echo viong3`'
viong5,$HOME
* lin`echo viong3`
去掉\n前面單引號作演示
反引號用於設置系統命令的輸出到變量,shell將反引號中的內容做爲一個系統命令,並執行其內容
eg:
[root@viong_app1 soft]# echo $viong
123
[root@viong_app1 soft]#
echo "lin`echo $viong`"
lin123
反斜槓 若是一個字符有特殊含義,反斜線防止shell誤解其含義,即屏蔽其特殊含義
如特殊含義字符:& * + $ | ?
eg:
[root@viong_app1 ~]# echo *
anaconda-ks.cfg install.log install.log.syslog soft
[root@viong_app1 ~]# echo \*
*
運算符
運算符是對計算機發的指令
運算對象
-數字 字符
-變量
-表達式
位運算符
$[ ] 表達式的值
~ A
反運算符 全部的二進制爲1變0,0變1
eg:
[root@viong_app1 ~]#
echo $[~4]
-5
4
100
因此~4 =011
-5 既然是負數,那麼這個數必定是按有符號數的規則來表示的,一個二進制按位取反
並加一,就可獲得它本身的負數的補碼
~x+1=-x
因此咱們把~5按位取反 -5= 010(~5 101取反010)+1 ->011即=~4
更簡單就是
~x=-x-1 規則去計算
位運算符大部分用在彙編語言中來表示內存中的存儲邏輯位,很複雜
A<<B 左移運算符
A中的二進制位左移B位 ,忽略最左端移出的各位,最右端各位補上0,每作一次換位左移就有實現A乘以2^B
eg:
010 左移三位 10000 =2^4
2<<3 至關於2x2x2x2=16
A>>B 右移運算符
A中的二進制位右移B位 ,忽略最右端移出的各位,最左端各位補上0,每作一次換位左移就有實現A除以2 ^B
eg:
10000 右移三位 100
16>>2 至關於 16/2/2=4
A&B 與比較運算符
A與B對於位,對於每一個二進制位來講,若是兩者該位都是1,則結果位1,不然位爲0
eg:
4 100
2 010
echo $[4&2] 則爲0
A^B 異或運算符
比較A
與B
的對應位,對於每一個二進制位來講,若是兩者該爲互補,則結果爲1,不然爲0
eg:
4 100
2 010
echo $[4^2] 則爲6
echo $[2^2] 則爲0
| 或運算符
比較A與B的對應位,對於每一個二進制位來講,若是兩者該位有一個是1或者都是1,則結果爲1,不然結果位爲0
eg:
4 100
2 010
6 110
echo $[4|2] 則爲6
echo $[2|6] 則爲6
邏輯運算符
&& 與運算符
A B A&&B
0 0 0
1 0 0
0 1 0
1 1 1
eg
:
4 100
2 010
echo $[4&&2]
則爲0
echo $[2&&2]
則爲1
|| 或運算符
對於每一個二進制位來講,若是兩者該位都是1,則
結果值爲1,不然
結果值爲0
A
B A||B
0
0 0
1
0 1
0
1 1
1
1 1
eg:
4 100
2 010
echo $[4||2] 則爲1
echo $[0||0] 則爲0
! 非運算符
關係(條件)運算符
<, <=, ==,!=, >, >=, ~(匹配正則表達式), !~(不匹配正則表達式)
賦值運算符
用於賦值運算,分爲簡單賦值(=)、複合算術賦值(+=,-=,*=,/=,%=)和複合位運算賦值(&=,|=,^=,>>=,<<=)三類共十一種
let count= $count + $change
let count+= $count
eg:
[root@viong_app1 ~]# viong=12
[root@viong_app1 ~]# echo viong
viong
[root@viong_app1 ~]# echo $viong
12
[root@viong_app1 ~]#
let viong+=5
let是bash內置的整數運算
[root@viong_app1 ~]# echo $viong
17
[root@viong_app1 ~]# let viong-=5
[root@viong_app1 ~]# echo $viong
12
[root@viong_app1 ~]# let viong*=5
[root@viong_app1 ~]# echo $viong
60
表達式替換
$[ ]
和$[] 同樣 ,全部shell的求值都是用整數完成
$[ ] 能夠接受不一樣基數的數字
[base#n] n 表示基數從2到36的任何基數
運算符的優先級