shell腳本基本應用(三)特殊的Shell變量

一丶數值變量的運算:bash

  1. Shell變量的數值運算多用於腳本程序的過程控制,在Shell環境中,只能進行簡單的整數運算,不支持小數運算,整數值的運算主要經過內部命令Expr執行。以下是基本格式ssh

    expr     變量1  運算符 變量2 [運算符  變量3]...ide

  2. 其中,變量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變量

  1. 環境變量:用於設置用戶的工做環境,包括用戶宿主目錄,命令查找路徑,用戶當前目錄,登陸終端等。環境變量的值有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語句。

相關文章
相關標籤/搜索