變量的種類
——–shell—–父shell —————-
| |
|———–bash 子shell—–|
變量:
1 環境變量 對當前shell及系統上的其他shell全部生效
2 僅對當前的shell環境生效
3 僅對當前shell的某一段生效(函數)
子shell只會繼承環境變量
并不會繼承父shell中的變量
. 或者 source /etc/profile 只在當前的shell環境中執行,一般用來校對環境變量
變量的賦值:
“” 弱引用 會把雙引號里面的變量替換
” 強引用 不會把引號里面的變量進行替換
“把反引號里面的命令執行結果賦值給變量
HZ=$SH 用變量賦值變量
定義一個環境變量:
export
declare -x
declare -x 環境變量
-r 只讀變量
-i 定義數值類型(整形)
算術運算
(1) let num=算術表達式 let r=9+9
(2) var=$[算術表達式] r=$[9+9]
(3) var=$((算術表達式)) r=$((9+9))
(4) expr 8 +
3 (要有空格)
(5)declare -i r=9+9
(6)bc
echo
{1..100} | tr ” ” “+” | bc
5050
(7) +=, i+=3等于i=i+3
(8) -=, i-=3等于i=i-3
(9)*=, i*=3等于i=i*3
(10) /=,
(11)%=
(12)i++ 先執行 執行完加1 (用的比較多)
(13)++i 先加1,再執行
例子:
[root@Centos7 script]# a=10
[root@Centos7 script]# b=10
[root@Centos7 script]# let c=a++
[root@Centos7 script]# echo $c
10
[root@Centos7 script]# echo $a
11
[root@Centos7 script]# let d=++b
[root@Centos7 script]# echo $d
11
[root@Centos7 script]# echo $b
11
[root@Centos7 script]#
字體顏色:30——37
echo -e
“\033[30m黑色字 \033[0m”
echo -e
“\033[31m紅色字 \033[0m”
echo -e
“\033[32m綠色字 \033[0m”
echo -e “\033[33m黃色字 \033[0m”
echo -e “\033[34m藍色字 \033[0m”
echo -e “\033[35m紫色字 \033[0m”
echo -e “\033[36m天藍字 \033[0m”
echo -e “\033[37m白色字 \033[0m”
字體背景顏色40—–47
echo -e
“\033[40;37m黑底白字 \033[0m”
echo -e
“\033[41;37m紅底白字 \033[0m”
echo -e
“\033[42;37m綠底白字 \033[0m”
echo -e
“\033[43;37m黃底白字 \033[0m”
echo -e
“\033[44;37m藍底白字 \033[0m”
echo -e
“\033[45;37m紫底白字 \033[0m”
echo -e
“\033[46;37m天藍底白字 \033[0m”
echo -e
“\033[47;30m白底黑字 \033[0m”
邏輯運算
true 1
false 0
1 與 1 = 1
1 與 0 = 0
0 與 1 = 0
0 與 0 = 0
1 或 1 = 1
1 或 0 = 1
0 或 1 = 1
0 或 0 = 0
!1 = 0
!0 = 1
&& 與
|| 或
1 && 1 = 1
1 && 0 = 0
1 || 1 = 1
1 || 0 = 1
短路預算:
命令1 && 命令2 命令1 成功執行 則執行命令2
命令1 執行失敗
則不會執行命令2
命令1 || 命令2 命令1成功執行,則命令2不執行
命令1執行失敗,則命令2執行
命令1
&& 命令2 || 命令3
如果命令1 成功執行 則執行命令2 且命令3不會執行
如果命令1 執行失敗 那么命令2就不會執行,則命令3執行
如果 命令1 成功
則 命令2;
否則 命令3;
退出狀態
使用$? 0代表前面一個命令執行成功
非0 代表前面一個命令執行失敗
可以在腳本里面自定義退出狀態
根據退出狀態來判斷一個命令的執行成功與否
exit [n]:自定義退出狀態碼
注意:腳本中一旦遇到exit命令,腳本會立即終止;終止退出狀態取決于exit命令后面的數字
注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼取決于腳本中執行的最后一條命令的狀態碼
例子:
grep -q “root” /etc/passwd && echo
“user exists” || echo “user not exists”
user exists
grep -q “rooooot” /etc/passwd &&
echo “user exists” || echo “user not exists”
user not exists
[root@Centos7 ~]# ls -d /u &>/dev/null && echo “dic exists” ||
echo “dic not exists”
dic not exists
測試條件
test 測試條件
[ 測試條件 ]
[[ 測試條件 ]] 條件測試的前后要加上空格
生產環境建議使用兩個中括號
數值測試:
-gt: 是否大于
-ge: 是否大于等于
-eq: 是否等于
-ne: 是否不等于
-lt: 是否小于
-le: 是否小于等于
[[ 6 > 2
]] && echo “OK”
字符串測試
==
>
<
!=
=~ 左邊的字符串是否包含右邊指定的字符串
-z 測試字符串是否為空
-n 測試字符串是否不為空
例子:
[root@Centos7 script]# [ 1 -gt 2 ] && echo
“OK”
[root@Centos7 script]# [ 3 -gt 2 ] && echo
“OK”
OK
[root@Centos7 script]#
[root@Centos7 script]# [ 3 -ge 2 ] && echo
“OK”
OK
[root@Centos7 script]# [ 2 -ge 2 ] && echo
“OK”
OK
[root@Centos7 script]# [ 2 > 2 ] && echo
“OK”
OK
[root@Centos7 script]#
[root@Centos7 script]# [ 1 > 2 ] && echo
“OK”
OK
[root@Centos7 script]# [ 1 \> 2 ] && echo
“OK”
[root@Centos7 script]#
[root@Centos7 script]# [ 5 \> 2 ] && echo
“OK”
OK
[root@Centos7 script]# [ 6 \> 2 ] && echo
“OK”
OK
文件測試:
-d 判斷是否存在 且是否是目錄
-f 判斷是否存在 且是否是普通文件
-r FILE:是否存在且可讀
-w FILE: 是否存在且可寫
-x FILE: 是否存在且可執行
判斷當前用戶對文件有讀寫執行的權限(root)
read -p 指定提示內容
-t 指定超時時間
產環境在寫腳本的時候
一般前面會先讀一下環境變量配置文件
. /etc/profile
java php
測試環境 生產環境1 生產環境2 生產環境3
php php php
php
172.16.0.1 192.168.1.1
192.168.1.100
如果代碼里面包含一些關于數據庫的配置 比如MySQL Redis
配置標準化
定義專門的環境變量的配置文件,比如webenv.sh
export MYSQL=1.1.1.1
export
MUSER=mysql
export
MPASSWD=12345
在/etc/profile里最后一行t添加
. webenv.sh
PATH=$PATH:/usr/local/apache/bin
/etc/issue 登錄前提示信息
/etc/motd 登陸后提示信息
字符串切片:
eg:MYNAME=”liangchenye”
substr=${MYNAME:4}
2 ${變量:位置起點:長度}
eg:MYNAME=”liangchenye”
substr2=${MYNAME:4:6}
給某個不存在的變量一個默認值
${待測變量:=默認值}
若變量不存在或其值為空,則符合判斷,傳回默認值
unset myname
echo ${myname:=”fuerkang”}
測試變量是否為空或者不存在,提示錯誤信息
${待測變量:?提示信息}
echo ${name:?”sorry no name”}
例子:
寫一腳本,接受一個用戶名為參數;
(1) 如果用戶的id號為0,則顯示其為管理員;
(2) 如果用戶的id號大于0且小于500, 則顯示其為系統用戶;
(3) 否則,則顯示其為普通用戶;
#!/bin/bash
2
3 USERNAME=$1
4
5 USERID=`id
-u ${USERNAME}`
6 [ -z
${USERID} ] && exit 4
7
8 if [
${USERID} -eq 0 ];then
9 echo “systemadmin.”
10 elif [
${USERID} -gt 0 -a ${USERID} -lt 1000 ];then
11 echo “system user.”
12 else
13 echo “common user.”
14 fi
原創文章,作者:yaobinbin,如若轉載,請注明出處:http://www.www58058.com/73496
主要介紹了一些shell編程的基礎用法,內容總結的非常詳細,建議你把代碼放入到”插入程序代碼”中去,那樣的話效果會好一些的!