shell 變量:正則表達式
name=」aaa」shell
echo $namevim
注意事項:數組
變量名和等號之間不能有空格bash
不能使用標點符號測試
不能使用bash裏的關鍵字spa
只讀變量:code
name=」aaa」blog
關鍵字:readonly name進程
刪除變量:
unset name
變量類型:
1 局部變量:
局部變量在腳本或命令中定義,僅在當前shell實例中有效,其餘shell啓動的程序不能訪問局部變量
2 環境變量:
全部的程序,包括shell啓動的程序,都能訪問環境變量,有些程序須要環境變量來保證其正常運行。必要的時候shell腳本也能夠定義環境變量。
系統環境變量:
查看全部環境變量:env
刪除環境變量:unset HAHA
舉個例子:
PPID:是當前進程的父進程的PID
PWD:當前工做目錄。
RANDO:隨機數變量。每次引用這個變量會獲得一個0~32767的隨機數。
查看全部環境變量:env
刪除環境變量:unset
用vim在/etc/profile文件中添加咱們想要的環境變量
設置新的環境變量
export 新環境變量名=內容
例:export MYNAME=」aaa」
生效:source /etc/profile
shell 字符串
單引號和雙引號的區別:
單引號裏的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
雙引號的優勢:
獲取字符串的長度:
str=」abcd」
echo ${#str}
提取字符串:
str=」abcd」
#表示從字符串第二個字符開始截取 ,取 4個字符
echo ${str:1:4}
shell 數組
定義數組
arr=(aa bb cc)
讀取數組
echo ${arr[0]}
獲取數組的長度
echo ${arr[@]}
echo ${arr[*]}
shell 多行註釋:
:<<EOF
xxxx
xxxxx
EOF
shell 基本運算符
算數運算符
+ 加法
- 減法
* 乘法
/ 除法
% 取餘
= 賦值
== 比較(相等)
!= 不相等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@localhost ~]
# expr 10 + 20
30
[root@localhost ~]
# echo $((10+30))
40
[root@localhost ~]
# n=10
[root@localhost ~]
# let n++
[root@localhost ~]
# echo $n
11
[]和[[]]區別
[[]]更強大,支持字符串的模式匹配(使用=~操做符時甚至支持shell的正則表達式)
[root@localhost ~]
# sh t.sh
包含
[root@localhost ~]
# cat t.sh
#!/bin/bash
a=
"xxoo"
if
[[ $a =~
"x"
]];
then
echo
"包含"
else
echo
"不包含"
fi
|
關係運算符
關係運算符只支持數字,不支持字符串,除非字符串的值是數字
-eq 是否相等
-ne 是否不相等
-gt 表示大於
-lt 表示小於
-ge 大於等於
-le 小於等於
布爾運算符
!
-o 或運算 兩個表達式只要有一個是true 就返回true
[ $a -lt 20 -o $b -gt 100 ] 返回 true
-a 與運算 兩個表達式都爲true才返回true
[ $a -lt 20 -a $b -gt 100 ] 返回 false
邏輯運算符
&& 等同於 –a
|| 等同於-o
if [[ $a –lt $b && $b –gt 100 ]]; then
echo 「」
else
echo 「」
fi
字符串運算符
=: 檢測兩個字符是否相等
!=: 檢測兩個字符不相等
-z : 是否爲空
-n :字符串的長度是否爲0
文件測試運算符
-b 檢測文件是否爲塊設備
-d 是否爲目錄
-f 是否爲普通文件
-r 是否可讀
-w 是否可寫
-x 是否可執行
shell echo 命令
name=」aaa」
echo –e 「$name \n」
-e 開啓轉義
\n 換行
printf
%s 將參數按字面意思解釋爲字符串
printf "%-10s\n" aaabbb
-10s 指一個寬度爲10個字符(-表示左對齊,沒有則表示右對齊),任何字符都會被顯示在10個字符寬的字符內,若是不足則自動以空格填充,超過也會將內容所有顯示出來。
%f 將參數按浮點數打印
%-4.2 小數點後面保留兩位小數
左對齊看不出效果
shell 流程控制
#!/bin/bash
a=30
b=50
if [ $a == $b ]; then
echo "a等於b"
elif [ $a -gt $b ]; then
echo "a大於b"
elif [ $a -lt $b ]; then
echo "a小於b"
else
echo "沒有符合的條件"
fi
#!/bin/bash
:<<EOF
for i in {1..100}
do
echo $i
done
EOF
for i in `seq 1 100`
do
echo $i
done
===========while=======
#!/bin/bash
int=0
while (($int<=5))
do
echo $int
#let "int++"
let int=int+1
done
[root@master ~]# cat while_true.sh
#!/bin/bash
:<<EOF
while :
do
echo "xx"
done
EOF
while true
do
echo "oo"
done
[root@master ~]# cat until.sh
#!/bin/bash
a=0
until [ $a -gt 10 ]
do
echo $a
a=`expr $a + 1`
done
[root@master ~]# cat case.sh
#!/bin/bash
echo "輸入一個1到4之間的數字"
echo "你輸入的數字爲:"
read num
case $num in
1)
echo "1"
;;
2)
echo "2"
;;
3)
echo "3"
;;
*)
echo "你輸入的數字有誤!請從新輸入"
;;
esac