一、變量命名 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
????1、只能包含字母、數字和下劃線,并且不能以數字開頭,
????2、不應該跟系統中已有的環境變量重名
????3、命名要有含義
二、變量賦值 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
變量名稱=值var_name=value?等號兩邊不能有空格
[root@hao ~]#
NAME=
jerry
[root@hao
~]#
echo
$NAME
jerry
三、bash:變量類型 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????????????????
1、環境變量
腳本在執行時會啟動一個子shell進程。命令行中啟動的腳本會繼承當前shell環境變量,也就是說環境變量的作用域為當前shell進程及其子shell進程。系統自動執行的腳本(非命令行啟動)則需要自我定義各環境變量。可以使用export設置環境變量。
export VARNAME=VALUE 或者 VARNAME=VALUE export VARNAME
?
[root@hao ~]#
NAME=
jerry
[root@hao
~
]#
export NAME
[root@hao
~]#
echo
$NAME
jerry
[root@hao
~
]#
bash
[root@hao
~]#
echo
$NAME
jerry
[root@hao
~
]#
bash
[root@hao
~]#
echo
$NAME
jerry
[root@hao ~]#
pstree
init-+-NetworkManager-+-dhclient
??? ...
???? |-sshd---sshd---sshd---bash---
su---bash---bash---bash---pstree
???? |-udevd---2*[udevd]
???? `-wpa_supplican
2、本地變量(局部變量)
變量一定是進程的變量,因此在一個shell中聲明的變量在其他的shell中不可用,并且在其子shell中也不可以得到。引用變量要加${varname},也可以不加{}。
[root@hao ~]#
NAME=
jerry
[root@hao
~]#
echo
$NAME
jerry
[root@hao
~
]#
bash
[root@hao
~]#
echo
$NAME
[root@hao
~
]#
exit
exit
[root@hao
~]#
echo
$NAME
jerry
本地變量:VARNAME=VALUE,作用域:整個bash進程。
局部變量 :local VARNAME=VALUE,作用域:當前代碼段。
3、位置變量
$n
例:寫一個腳本,能接受一個參數(文件路徑),判定此參數是否是一個存在的文件,如果是就顯示“ok”
[root@hao ~]#
nano filetest.
sh
[root@hao ~]#
cat
filetest.
sh
#
! /bin/
bash
#
if
[ -e $
1
];
then
echo
"
ok
"
else
echo
"
no such file
"
fi
[root@hao ~]#
chmod
+x filetest.
sh
[root@hao ~]#
./filetest.
sh
/etc/
fstab
ok
[root@hao
~]#
./filetest.
sh
/etc/
fstabs
no such
file
shift, 每次shift都會剔除一個參數 shift n表示剔除n 個
[root@hao ~]#
nano filetest1.
sh
[root@hao ~]#
cat
filetest1.
sh
#
!/bin/
bash
echo
$
1
shift
echo
$
1
shift
echo
$
1
[root@hao
~]#
chmod
+x filetest1.
sh
[root@hao ~]#
./filetest1.
sh
1
2
3
1
2
3
4、特殊變量(系統變量)
用來保存某些特殊數據:
$?: 保存上一個命令的執行狀態返回值(0-255)。0為正確,其他為錯誤。其中1,2,127系統預留,其他的可以自定義。
[root@hao ~]#
ls
/
var
account crash db games lib lock mail opt run tmp yp
cache cvs empty gdm local log nis preserve spool www
[root@hao
~]#
echo
$?
0
[root@hao ~]#
ls
/
varr
ls
: cannot access /varr: No such
file
or directory
[root@hao
~]#
echo
$?
2
如果只想看返回的狀態值而不想看輸出結果,則只需將輸出重定向至數據黑洞/dev/null
[root@hao ~]#
ls
/varr &> /dev/
null
[root@hao ~]#
echo
$?
2
$#:參數的個數
$*:參數列表
$@:參數列表(與上面的有不同)
例:寫一個腳本,能接受一個參數(文件路徑),判定此參數是否是一個存在的文件,如果是就顯示“ok”
[root@hao ~]#
nano filetest.
sh
[root@hao
~]#
cat
filetest.
sh
#
! /bin/
bash
#
echo
$#
echo
$*
echo
$@
if
[ $# -lt
1
];
then
echo
"
Usage:./filetest.sh ARG1 ARG2 ...
"
exit
7
fi
if
[ -e $
1
];
then
echo
"
ok
"
else
echo
"
no such file
"
fi
[root@hao ~]#
chmod
+x filetest.
sh
[root@hao ~]#
./filetest.
sh
0
Usage:.
/filetest.
sh
ARG1 ARG2 ...
[root@hao ~]#
./filetest.sh? /etc/fstab /etc/fstabs
2
/etc/fstab /etc/fstabs
/etc/fstab /etc/fstabs
ok
四、撤銷變量 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
[root@hao ~
]#
unset NAME
[root@hao
~]#
echo
$NAME
五、查看當前shell變量 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
查看當前shell所有變量,包含環境變量和本地變量
[root@hao ~
]#
set
BASH
=/bin/
bash
BASHOPTS
=
checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES
=
()
...
查看當前shell環境變量 printenv env 或者export
[root@hao ~
]#
printenv
HOSTNAME
=
hao
SHELL
=/bin/
bash
TERM
=
xterm
...
六、追加shell變量 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
[root@hao ~]#
ANIMAL=
pig
[root@hao
~]#
ANIMAL=
$ANIMAL:goat
[root@hao
~]#
echo
$ANIMAL
pig:goat
[root@hao
~]#
echo
$PATH
/usr/lib64/qt-
3.3
/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/
bin
[root@hao
~]#
export PATH=$PATH:/usr/local/apache/
bin
[root@hao
~]#
echo
$PATH
/usr/lib64/qt-
3.3
/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache/
bin
[root@hao
~]#
export PATH=/usr/local/mysql/
bin:$PATH
[root@hao
~]#
echo
$PATH
/usr/local/mysql/bin:/usr/lib64/qt-
3.3
/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache/bin
七、第一個腳本程序 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
首先創建腳本程序first.sh,腳本程序的第一行要指定程序的魔數,#!加上解釋器的路徑。然后賦予其執行權限,之后執行,執行時候要加上路徑,因為在沒有給路徑時,默認去path中去找該命令是否存在。
[root@hao ~]#
cat
first.
sh
#
!/bin/
bash
ls
/
var
cat
/etc/
inittab
[root@hao
~]#
chmod
+x first.
sh
[root@hao ~]#
./first.
sh
account crash db games lib lock mail opt run tmp yp
cache cvs empty gdm local log nis preserve spool www
# inittab is only used by upstart
for
the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by
/etc/init/
rcS.conf
#
# Individual runlevels are started by
/etc/init/
rc.conf
#
# Ctrl
-Alt-Delete is handled by /etc/init/control-alt-
delete.conf
#
# Terminal gettys are handled by
/etc/init/tty.conf and /etc/init/
serial.conf,
# with configuration
in
/etc/sysconfig/
init.
#
# For information on how to
write
upstart event handlers, or how
# upstart works, see init(
5
), init(
8
), and initctl(
8
).
#
# Default runlevel. The runlevels used are:
#
0
-
halt (Do NOT set initdefault to this)
#
1
-
Single user mode
#
2
- Multiuser, without NFS (The same as
3
,
if
you
do
not have networking)
#
3
-
Full multiuser mode
#
4
-
unused
#
5
-
X11
#
6
-
reboot (Do NOT set initdefault to this)
#
id
:
5
:initdefault:
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

