腳本執行命令測試


版權聲明
#####################################################
#本文內容來自《老男孩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個當前環境變量生效

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