一丶數值變量的運算:bash
Shell變量的數值運算多用於腳本程序的過程控制,在Shell環境中,只能進行簡單的整數運算,不支持小數運算,整數值的運算主要經過內部命令Expr執行。以下是基本格式ssh
expr 變量1 運算符 變量2 [運算符 變量3]...ide
其中,變量1,變量2....對應爲須要計算的數值變量(須要以「$」符號調用),以下是經常使用的幾種運算符:命令行
+:加法運算server
-:減法運算對象
\*:乘法運算,注意不能僅使用"*"符號,不然會當成文件通配符ip
/:除法運算ci
%:取餘運算qt
例:it
[root@dbserver ~]# X=35
[root@dbserver ~]# Y=16
[root@dbserver ~]# expr $X + $Y //+兩邊要有空格啊
51
[root@dbserver ~]# expr $X - $Y
19
[root@dbserver ~]# expr $X \* $Y
560
[root@dbserver ~]# expr $X / $Y
2
[root@dbserver ~]# expr $X % $Y
3
例:計算變量Y的三次方,並將結果賦值給變量Ycube。
[root@dbserver ~]# Ycube=`expr $Y \* $Y \* $Y`
[root@dbserver ~]# echo $Ycube
4096
二丶特殊的Shell變量
環境變量:用於設置用戶的工做環境,包括用戶宿主目錄,命令查找路徑,用戶當前目錄,登陸終端等。環境變量的值有Linux系統自動維護,會隨着用戶狀態的改變而改變。例:使用env命令查看當前環境下的環境變量。
MAIL=/var/spool/mail/root
PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=en_US.UTF-8
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
2.PATH變量用於設置可執行程序的默認搜索路徑,當僅指定文件名稱來執行命令程序時,Linux將在PATH變量指定的目錄範圍查找對應的可執行文件,若找不到則會提示「command not found」,例:
[root@dbserver ~]# ls -lh /script/
total 4.0K
-rwxr-xr-x 1 root root 112 Jun 14 21:53 first.sh
[root@dbserver ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@dbserver script]# first.sh
-bash: first.sh: command not found
[root@dbserver ~]# PATH="$PATH:/script"
[root@dbserver ~]# echo $PATH
/usr/lib64/qt3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root:/script
[root@dbserver ~]# first.sh
In the current directory:
/boot
Begin with VML files including:
-rwxr-xr-x. 1 root root 4.0M Nov 11 2013 vmlinuz-2.6.32-431.el6.x86_64
3.在Linux系統中,環境變量的全局配置文件爲/etc/profile,再此文件中定義的變量做用於全部的用戶,除此以外,每一個用戶還有本身的獨立配置文件(~/.bash_profile)。若要長期變動或者設置某個環境變量,應在上述文件中進行設置,例:將記錄的歷史命令條數改成200(默認爲1000),只針對root用戶。
[root@dbserver ~]# cat /root/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
exprot HISTSIZE=200
[root@dbserver ~]# history |wc -l
387
[root@dbserver ~]# source /root/.bash_profile
[root@dbserver ~]# history | wc -l
200
4.位置變量:位置變量也稱爲位置參數,使用$1,$2,$3,...$9表示,例如。當執行命令行"ls -lh /boot"時,其中第一個變量爲"-lh",以$1表示,第二個位置變量爲"/boot",以$2表示。命令或者腳本自己的名稱用"$0"表示。例:
[root@dbserver script]# cat SUM.sh
#!/bin/bash
SUM=`expr $1 + $2`
echo "$1 + $2 = $SUM"
[root@dbserver script]# chmod +x SUM.sh
[root@dbserver script]# ./SUM.sh 38 47
38 + 47 = 85
5.預約義變量:有BASH程序預先定義好的一類特殊變量,用戶只能使用,不能建立,接下來我列舉一下:
$#:表示命令行中位置參數的個數。
$*:表示全部位置參數的內容
$?:表示當前一條命令執行後的返回狀態,返回值爲0表示執行正確,返回任何非0的數表示異常,後續講解。
$0:表示當前執行的腳本或程序名稱。
例:爲了說明預約義變量的做用,下面編寫一個備份小腳本,,用來打包命令行指定的多個文件或者目錄,並輸出相關信息,其中,新建的壓縮包文件名稱中嵌入秒刻,經過"date +%s"命令獲取秒刻時間。
[root@dbserver script]# cat mybak.sh
#!/bin/bash
TARFILE=beifen-`date +%s`.tgz
tar zcf $TARFILE $* &> /dev/null
echo "executed $0 script" //已執行$0個腳本
echo "executed $# A backup objects" //共完成$#個對象備份
echo "A backup objects: $*" //具體包括
[root@dbserver script]# chmod +x mybak.sh
[root@dbserver script]# ./mybak.sh /boot/grub/ /etc/
executed ./mybak.sh script
executed 2 A backup objects
A backup objects: /etc/
[root@dbserver script]# ls -lh beifen-* //確認備份腳本
-rw-r--r-- 1 root root 9.7M Jun 23 22:08 beifen-1466690927.tgz
OK今天就說這麼多吧,慢慢來,弄懂爲止,明天正好有時間寫if語句。