脚本执行命令测试


版权声明
#####################################################
#本文内容来自《老男孩linux运维实战培训》学生—徐睦彬
#如有转载,请务必保留本文链接及本版权信息。
#欢迎广大运维同仁一起交流linux/unix网站运维技术!
#QQ:40594324
#E-mail:[email protected]
=====================================================
老男孩linux运维实战培训中心
咨询  QQ: 70271111 357851641
咨询电话:18911718229
网站地址: http://www.etiantian.org
老男孩博客: http://oldboy.blog.51cto.com
老男孩的QQ: 31333741
#####################################################
黑色底:输入的系统信息

上周oldboy老男孩老师正好讲编程,讲了不少容易忽略的技巧,然后我发现很多技能正好对我很有用。纠正了过去写脚本的一些不良毛病。
其中一个收获是搞明白了如何利用脚本启用bashrc中的变量。纠结了很久的问题。。。每次都得手动启动一次。我的IDC测试脚本终于可以完全一键搞定了。利用了不少老师讲课的思路,上完课后对脚本进行了一次手术,现在再看脚本,更简单合理。等空暇时候重新梳理下,再改写下。这里分享下如何利用脚本自定义环境变量,且全局生效。是根据老师讲的全局变量内容推导出来的,理论上可以实现,实际测试后也确实实现了。

[root@cobblermode ~]# vi pro (这里随意命名,测试用)
#!/bin/bash
cat >>/root/.bashrc <<EOF
alias da='cd /data'
EOF
. /root/.bashrc

脚本中添加./root/.bashrc这条命令是关键点

[root@cobblermode ~]# bash pro
[root@cobblermode ~]# da
-bash: da: command not found
(未生效)
[root@cobblermode ~]# . pro
[root@cobblermode ~]# da
[root@cobblermode data]#
(生效了)
再开个窗口试试看

Last login: Thu Apr 12 11:11:36 2012 from 192.168.10.1
[root@cobblermode ~]# da
[root@cobblermode data]#
仍旧生效。

以前我喜欢用bash file.sh;完全没注意过. file.sh的区别。下面的是测试.的用途

"."测试
结论:
. 可以将当前变量带人到当前窗口中 。shell里面调用shell用. 和source 。sh是调不出来的。用.加载可以调用函数
测试:
 
 [root@cobblermode ~]# echo $a
 
由于此时$a没有定义,因此输出空,a无变量
给a赋值
[root@cobblermode ~]# a=192.168.1.2
[root@cobblermode ~]# cat >b.sh
a=192.168.1.2-$a
b='192.168.1.2-$a'
c="192.168.1.2-$a"
echo "a=$a"
echo "b=$b"
echo "c=${c}"
[root@cobblermode ~]# bash b.sh
a=192.168.1.2-
b=192.168.1.2-$a
c=192.168.1.2-192.168.1.2-
bash没有调用当前变量
[root@cobblermode ~]# . b.sh
a=192.168.1.2-192.168.1.2
b=192.168.1.2-$a
c=192.168.1.2-192.168.1.2-192.168.1.2
.将全局,局部变量调用到了脚本中,由于a此刻有值,因此开始时$a被直接调用,所以当执行脚本时候,$a值被赋予了脚本,因此在执行脚本输出结果时候a=192.168.1.2-192.168.1.2这个结果实际上 并不是我们想要的结果。
我们想要的测试结果是:
[root@cobblermode hawk]# cat >te.sh
m=192.168.1.2-$m
n='192.168.1.2-$m'
p="192.168.1.2-$m"
echo "m=$m"
echo "n=$n"
echo "p=${p}"
[root@cobblermode hawk]# . te.sh
m=192.168.1.2-
n=192.168.1.2-$m
p=192.168.1.2-192.168.1.2-
第一次执行时候第一句$m为空,所以m=192.168.1.2-;再次执行一次
[root@cobblermode hawk]# . te.sh
m=192.168.1.2-192.168.1.2-
n=192.168.1.2-$m
p=192.168.1.2-192.168.1.2-192.168.1.2-
[root@cobblermode hawk]# echo $m
192.168.1.2-192.168.1.2-
第二次执行时候由于当前变量被带入到当前窗口中,所以$m此时不为空,为192.168.1.2-
因此第二次执行完毕后$m=192.168.1.2-192.168.1.2-
这里再次验证了.是将脚本中的变量带入到了当前窗口。
"." 可以将当前变量带人到当前窗口中.且变量生效。相当于一个只针对当前页面的环境变量
但是在最开始的时候,由于是将变量写入到了一个文件,然后执行了这个文件,因此变量不仅仅针对此窗口有效,还有可以写入到全局变量里面

bash,sh,.,source都可以无x权限执行文件。前2个无视当前变量。后2个当前环境变量生效

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章