shell學習筆記(二)shell變量與運算符

 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
echo $[2&2]  則爲2
 
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
 
邏輯運算符
 
&&  與運算符
 
對於每一個二進制位來講,若是兩者該位都是1 ,則結果值爲1 ,不然結果值爲0
 
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的任何基數
 
運算符的優先級

相關文章
相關標籤/搜索