Linux变量 2011-08-29 10:54:51 www. 来源:互联网
key words:定义 、命名规则 、设置局部变量与全局变量 、读取变量值、取消与清空变量、变量的有效作用范围、设置PATH环境变量、bash的内置命令和内置变量、调整变量的属性、别名、数组 一、什么是变量 ... key words:定义 、命名规则 、设置局部变量与全局变量 、读取变量值、取消与清空变量、变量的有效作用范围、设置PATH环境变量、bash的内置命令和内置变量、调整变量的属性、别名、数组 一、什么是变量 变量——可以暂时存储数据的地方,程序设计的基石 bash shell 没有所谓的数据形态,不会区分整型、浮点型、字符型等变量,在bash shell中默认只有一种数据型态:以字符组成的字符串,bash shell把任何存储在变量中的值皆视为以字符组成的字符串,除非使用内置命令declare特别指定变量形态 所以,bash shell的变量不必经过事先声明,想用就用。 例: [root@localhost ~]# cat bb i=liting echo i am $i echo done [root@localhost ~]# chmod a+x bb [root@localhost ~]# ./bb i am liting done 二、变量名称 由英文字母、数字和下划线组成,开头第一个字母不能使用数字,有大小写区别,长度不限。 例:mydomain、_for_system、BlackCar 三、设定变量:变量名=值 最好用双引号或单引号把变量值括起来,单引号的作用是形成一个所见即所得的字符串,不会进行任何替换变量的操作,双引号可以替换变量、命令执行结果及算术运算结果。 设定局部变量 例:myname="liting wen" [root@localhost ~]# cat bb #! /bin/bash shopt -s -o nounset h="twenty_four" i="i am $h" echo $i [root@localhost ~]# ./bb i am twenty_four 在脚本前面加上shopt -s -o nounset可以避免手误写错变量,-s:打开选项,nounset:变量一定要先设定过才能使用,否则会提示unbound variable 设定全局变量: 全局变量=环境变量 若该变量需要在其他子进程中执行,则需要用export来使变量变成环境变量。 [root@localhost ~]# cat testvar.sh #! /bin/bash testvar="hello world" export testvar echo $testvar [root@localhost ~]# ./testvar.sh hello world [root@localhost ~]# bash 进入一个子shell [root@localhost ~]# ./testvar.sh hello world 四、读取变量值 $变量名称 ${变量名称} 若变量后面接有字母或下划线,必须用 {} 括起变量名 #! /bin/bash shopt -s -o nounset h=twenty echo ${h}_four [root@localhost ~]# ./bb twenty_four [root@localhost ~]# vim bb [root@localhost ~]# ./bb 否则会出现以下报错 ./bb: line 4: h_four: unbound variable 除了echo,bash还提供了一个和C语言类似的printf命令: [root@localhost ~]# cat bb #! /bin/bash shopt -s -o nounset h="wlt" printf "%s""$h " [root@localhost ~]# ./bb wlt s%:字符串 d%:整数 f%:浮点数 %%:显示%这个符号 c%:字符 五、取消与清空变量 取消变量 unset变量名称/函数名称 -v 表示要取消的是变量 -f 表示要取消的是函数 例: [root@localhost ~]# cat bb #! /bin/bash shopt -s -o nounset h="twenty_four" unset -v h printf "%s""$h " [root@localhost ~]# ./bb ./bb: line 5: h: unbound variable 清空变量: 变量名称= 例: [root@localhost ~]# cat bb #! /bin/bash shopt -s -o nounset h="twenty_four" h = printf "%s""$h " [root@localhost ~]# ./bb [root@localhost ~]# 六、变量的有效作用范围 bash shell中 有两种类型的变量: 全局变量 本地变量 本地变量只在本进程中有效 全局变量在shell会话和该shell产生的任何子进程中可见,本地变量只在创建他们的shell中可见。 查看全局变量: [root@localhost ~]# printenv SSH_AGENT_PID=3624 HOSTNAME=localhost.localdomain DESKTOP_STARTUP_ID= TERM=xterm SHELL=/bin/bash HISTSIZE=1000 GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2 WINDOWID=24117329 USER=root 。。。。。。 LESSOPEN=|/usr/bin/lesspipe.sh %s DISPLAY=:0.0 G_BROKEN_FILENAMES=1 COLORTERM=gnome-terminal XAUTHORITY=/tmp/.gdmOKVDWV 查看特定进程下的所有环境变量: [root@localhost ~]# set BASH=/bin/bash BASH_ARGC=() BASH_ARGV=() BASH_LINENO=() 。。。。。。 HISTSIZE=1000 HOME=/root HOSTNAME=localhost.localdomain HOSTTYPE=i686 IFS=$' \t ' INPUTRC=/etc/inputrc LANG=zh_CN.UTF-8 LESSOPEN='|/usr/bin/lesspipe.sh %s' 。。。。。。 XMODIFIERS=@im=none _=clear consoletype=pty tmpid=0 使用set命令时并非所以默认的环境变量都会列出来,应为虽然有很多环境变量,但并非所以环境变量都有值。 全局变量和本地变量的作用范围例子: [root@localhost ~]# echo $HOME /root [root@localhost ~]# bash 用bash命令开启一个新的shell [root@localhost ~]# bash [root@localhost ~]# echo $HOME 全局命令依然可用 /root [root@localhost ~]# exit exit [root@localhost ~]# exit 退出两层shell exit [root@localhost ~]# i=5 定义一个本地环境变量 [root@localhost ~]# echo $i 5 [root@localhost ~]# bash 再开启一个新shell [root@localhost ~]# echo $i 显示不了发现刚才定义的环境变量 全局变量 export -p :列出当前所有的环境变量 例: [root@localhost ~]# cat testvar.sh #! /bin/bash testvar="hello world" export testvar echo $testvar [root@localhost ~]# bash [root@localhost ~]# ./testvar.sh hello world [root@localhost ~]# 设置PATH环境变量 Linux系统上发生的很多命令问题都是由PATH环境变量造成的,它定义shell在哪里查找命令行中输入的命令,如果如法找到就会生成错误信息: [root@localhost ~]# liting bash: liting: command not found [root@localhost ~]# 当程序把可执行程序房子PATH环境变量以为的目录中时,可以在现有PATH中添加新的搜索目录。 [root@localhost ~]# echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin [root@localhost ~]# PATH=$PATH:/root/liting [root@localhost ~]# echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/root/liting [root@localhost liting]# chmod a+x aa [root@localhost liting]# aa it work! [root@localhost liting]# cd [root@localhost ~]# aa it work! [root@localhost ~]# cd /etc [root@localhost etc]# aa it work! [root@localhost etc]# 七、bash的内置命令和内置变量 bash的内置命令 可以不去程序搜寻路径$PATH中寻找,直接就可以执行,速度比较快,常见的内置命令有: alias、bg、bind、break、type、time、logout、export、exec、declare、dirs、echo、enable、help、if、kill、return等 bash默认建立了许多内置变量,shellscript程序设计者不可不知 例如 BAHS、BASH_VERSION、CDPATH、HOME、HOSTTYPE、LANG、PATH、TMOUT、UID …… 八、调整变量的属性 想某些变量的值不被修改,例如PI=3.14,可以把变量设为只读变量 命令: readonly declare readonly 变量名 [root@localhost ~]# cat bb #! /bin/bash shopt -s -o nounset readonly x=3 x=8 echo $x [root@localhost ~]# ./bb ./bb: line 4: x: readonly variable 3 [root@localhost ~]# readonly -p :显示目前只读变量 readonly -f 函数名称 :该函数式不可修改 readonly -a 数组变量 :只读数组 declare -r 变量名称 例 [root@localhost ~]# cat bb #! /bin/bash shopt -s -o nounset x=2 declare -r x x=8 echo $x [root@localhost ~]# ./bb ./bb: line 5: x: readonly variable 2 [root@localhost ~]# declare的其他用法: declare -p VAR 显示VAR的属性 declare -a arry 设定arry是个数组 declare -i VAR 设定VAR是整数型态 declare -x VAR 设定VAR为环境变量 九、别名 查看系统设置的别名: [root@localhost ~]# alias -p alias cp='cp -i' alias l.='ls -d .* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 设置别名 [root@localhost ~]# alias ld='ls -ld' [root@localhost ~]# ld drwxr-x--- 19 root root 4096 05-29 08:38 . [root@localhost ~]# ld /etc drwxr-xr-x 101 root root 12288 05-29 08:37 /etc [root@localhost ~]# 取消别名 unalias 别名 unalias -a 取消所有别名 [root@localhost ~]# unalias ld [root@localhost ~]# ld /etc /etc: file not recognized: Is a directory [root@localhost ~]# 设置别名的文件:~./bashrc 十二、数组 bash shell只支持一维数组(关系型数组在bash4.0中才支持),其元素个数没限制,数组的索引由0开始,不一定要连续,也可以用算术表达式表示,如1+3 例: A[0]=1 A[1]=3 A[2]="bash shell" 1、取出数组元素 取出数组A的第三个元素值:echo ${A[2]} 取出数组所有的元素:echo ${[@]}或echo ${[*]} 取出数组元素的个数 ${#A[@]} 例: [root@localhost ~]# cat bb #! /bin/bash shopt -s -o nounset A[0]=1 A[1]=3 A[2]=5 echo ${A[2]} echo ${A[@]} echo ${#A[@]} [root@localhost ~]# ./bb 5 1 3 5 3 2、取消数组元素:unset A[n] 取消数组A:unset A [root@localhost ~]# cat bb #! /bin/bash shopt -s -o nounset A[0]=1 A[1]=3 A[2]=5 unset A[0] echo ${A[0]} echo ${A[@]} echo ${#A[@]} [root@localhost ~]# ./bb ./bb: line 7: A[0]: unbound variable 本文出自 “吖one的学习笔记” 博客,请务必保留此出处http://oneliting.blog.51cto.com/1043925/650908 本篇文章来源于 黑基网-中国最大的网络安全站点 原文链接:http://www./tech/2011-08-29/65169.html 本篇文章来源于 黑基网-中国最大的网络安全站点 原文链接:http://www./tech/2011-08-29/65169.html |
|
来自: 用勿龍潛 > 《bash脚本语言》