设为首页 收藏本站
查看: 965|回复: 0

[经验分享] 第九章 变量的高级用法

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-8-15 08:58:25 | 显示全部楼层 |阅读模式
内部变量
1.BASH
记录了bash Shell的路径(通常为/bin/bash)
[iyunv@localhost tmp]# echo "$BASH"
/bin/bash
2.BASH_VERSINFO
为一个数组,分别存储bash shell的主版本号,此版本号,补丁级别,编译版本,发行状态,硬件架构
[iyunv@localhost tmp]# cat c.sh
#! /bin/bash
for n in 0 1 2 3 4 5
do
echo "BASH_VERSINFO[$n]=${BASH_VERSINFO[$n]}"
done
[iyunv@localhost tmp]# ./c.sh
BASH_VERSINFO[0]=3
BASH_VERSINFO[1]=2
BASH_VERSINFO[2]=25
BASH_VERSINFO[3]=1
BASH_VERSINFO[4]=release
BASH_VERSINFO[5]=x86_64-redhat-linux-gnu
3.BASH_VERSION
和BASH_VERSINFO一样,只不过用字符串表示
[iyunv@localhost tmp]# echo "$BASH_VERSION"
3.2.25(1)-release
4.目录栈
用于存放工作目录,便于程序员手动控制目录的切换
[iyunv@localhost tmp]# dirs    #显示栈的所有内容,可以看见系统自动压入当前目录(实质上先弹出栈顶目录再压入当前目录)
/tmp
[iyunv@localhost tmp]# pushd /home  #压入/home,后进先出,注意目录变化
/home /tmp
[iyunv@localhost home]# pushd /home/clc  #压入/home/clc
/home/clc /home /tmp
[iyunv@localhost clc]# popd    #弹出,注意目录变化
/home /tmp
[iyunv@localhost home]# pushd clc  #相对于目录压入,和压入/home/clc效果一样,注意目录变化
/home/clc /home /tmp
[iyunv@localhost clc]# echo $DIRSTACK   #显示栈顶目录
/home/clc
5.GLOBIGNORE(globbing,通配)
表示通配时候忽略(ignore)文件名的集合,默认为空
[iyunv@localhost tmp]# ls a*
a   a1~     a2.awk  a3.sh   a4.sh  a6.sh  aac    all.tar.gz
a1  a1.awk  a3.awk  a4.awk  a5.sh  aabc   a.awk  a.sh
[iyunv@localhost tmp]# GLOBIGNORE="a*.sh"
[iyunv@localhost tmp]# ls a*
a  a1  a1~  a1.awk  a2.awk  a3.awk  a4.awk  aabc  aac  a.awk  all.tar.gz
6.GROUPS
以数组的形式存储当前用户所在的组
[iyunv@localhost ~]# cat /etc/group | grep root
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
disk:x:6:root
wheel:x:10:root
[iyunv@localhost ~]# echo $GROUPS
0
[iyunv@localhost ~]# echo ${GROUPS[0]}
0
[iyunv@localhost ~]# echo ${GROUPS[1]}
1
[iyunv@localhost ~]# echo ${GROUPS[2]}
2
[iyunv@localhost ~]# echo ${GROUPS[3]}
3
[iyunv@localhost ~]# echo ${GROUPS[4]}
4
[iyunv@localhost ~]# echo ${GROUPS[5]}
6
[iyunv@localhost ~]# echo ${GROUPS[6]}
10
[iyunv@localhost ~]# echo $GROUPS[6]  #注意要加{}才能当做整体
0[6]
7.HOSTNAME
记录主机名,在/etc/sysconfig/network中设置主机名,在/etc/host中设置主机名和IP的对应关系
[iyunv@localhost ~]# echo $HOSTNAME
localhost.localdomain
[iyunv@localhost ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=localhost.localdomain
[iyunv@localhost ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
192.168.127.135         localhost.localdomain
::1             localhost6.localdomain6 localhost6
8.HOSTTYPE和MACHTYPE
记录系统的硬件架构,和BASH_VERSINFO[5]等价
[iyunv@localhost ~]# echo ${BASH_VERSINFO[5]}
x86_64-redhat-linux-gnu
[iyunv@localhost ~]# echo $HOSTTYPE
x86_64
[iyunv@localhost ~]# echo $MACHTYPE
x86_64-redhat-linux-gnu


9.REPLY
如果read后面不跟参数则默认存储在REPLY中

select variable [in list]
do
...
break
done
中,REPLY用于存储用户选择的数字
例:
1.
[iyunv@localhost ~]# read
clc
[iyunv@localhost ~]# echo $REPLY
clc
[iyunv@localhost ~]# read name    #有跟变量则存储在变量中不存储在REPLY中
clc1
[iyunv@localhost ~]# echo $REPLY
clc
2.
[iyunv@localhost ~]# cat d.sh
#! /bin/bash
select name in "clc" "clc1" "clc2"
do
echo "\$REPLY is $REPLY"
echo "you select $name"
break
done
[iyunv@localhost ~]# ./d.sh
1) clc
2) clc1
3) clc2
#? 2
$REPLY is 2
you select clc1
10.SECONDS
记录脚本的执行时间(单位为秒)
有类型变量
declare [选项] 变量名
选项:
-r 设置为只读
-i 定义为整数
-a 定义为数组
-f 显示此脚本前定义过的所有函数名及其内容
-F 仅显示此脚本前定义过的所有函数名
-x 将变量声明为环境变量
例:
[iyunv@localhost ~]# num=2012
[iyunv@localhost ~]# num1=$num+1  #以字符方式处理
[iyunv@localhost ~]# echo $num1
2012+1
[iyunv@localhost ~]# let "num1=$num+1" #以数字方式处理
[iyunv@localhost ~]# echo $num1
2013
[iyunv@localhost ~]# declare -i num1  #把num1当做整数类型
[iyunv@localhost ~]# num1=$num+1
[iyunv@localhost ~]# echo $num1
2013
间接引用
第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值成为间接变量引用
例:
1.
[iyunv@localhost ~]# variable1=variable2
[iyunv@localhost ~]# variable2=value
[iyunv@localhost ~]# echo ${!variable1}  #间接变量引用
value
2.数据库
[iyunv@localhost ~]# cat b1.sh
#! /bin/bash
#database
s01_name=clc1
s01_id=001
s02_name=clc2
s02_id=002
s03_name=clc3
s03_id=003
select choice in "s01" "s02" "s02"
do
name=${choice}_name
id=${choice}_id
echo "name:${!name}"
echo "id:${!id}"
break
done
结果:
[iyunv@localhost ~]# ./b1.sh
1) s01
2) s02
3) s02
#? 2
name:clc2
id:002
注:间接引用变量中,第一个变量存放的是最终值的地址,实现了类似指针的功能
浮点数运算
工具:bc
[iyunv@localhost ~]# bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3.2*2*2
12.8
r=3
7/(r+r)
1
scale=4
7/(r+r)
1.1666
quit
脚本运算:
[iyunv@localhost ~]# cat b2.sh
#! /bin/bash
value1=1.1
value2=`echo "scale=10;$value1*$value1" | bc`    #``中的内容解析成系统命令
value3=`echo "scale=10;$value2*$value2" | bc`
echo "vlaue1=$value;value2=$value1*$value1=$value2;value3=$value2*$value2=$value3"
[iyunv@localhost ~]# ./b2.sh
vlaue1=;value2=1.1*1.1=1.21;value3=1.21*1.21=1.4641


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-23878-1-1.html 上篇帖子: 第二章 Linux文件系统和文本编辑器 下篇帖子: Python复杂数据类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表