Decode360's Blog

          業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          八、環境文件
          ?
          ??? bash的環境文件包括:.bash_profile文件、.bashrc文件、.bash_logout文件等
          ?
          ??? .bash_profile:設置化境變量和文件掩碼(umask),注冊后執行
          ??? .bashrc:只含有針對bash的腳本,可以用來設置別名,在.bash_profile之后執行
          ??? .bash_logout:退出注冊是執行,例如清屏等操作
          ?
          ??? 注:若是C shell,則相應文件為.login
          ?
          ?
          九、export語句與環境設置
          ?
          1、export語句
          ?
          ??? 在腳本或命令行中定義的變量(包括環境變量),僅在同一shell下有效,例如:
          ??? $ string="XXXX"
          ??? $ cat ex11
          ??????? echo "the name is $string"
          ??? $ ./ex11
          ??????? the name is
          ??? $ echo $string
          ??????? the name is XXXX
          ??? 可以看到,上面的例子中,定義的string變量僅在當前的shell下有效,而在ex11環境下為空。
          ?
          ??? export命令的作用就是將私有的變量export到轉出區
          ??? export [變量名]
          ?
          ??? 例如:
          ??? $ name="AAA"
          ??? $ export name
          ??? $ cat ex12
          ??????? name="BBB"
          ??????? echo "His name is $name"
          ??????? ex13
          ??? $ cat ex13
          ??????? echo "Her name is $name"
          ??? $ ./ex12
          ??????? His name is BBB
          ??????? Her name is AAA
          ?
          ??? 注:export在同一命令行中可以對應多個變量,例如:
          ??? $ export TERM PATH SHELL HOME
          ?
          2、環境變量的設置和顯示
          ?
          ??? 直接設置變量的形式為: [變量名]=值
          ??? 注意:如果含有空格等特殊字符,用""括起來
          ?
          ??? 可以使用不帶參數的export命令顯示本進程利用export命令所輸出的全部變量
          ??? $ export
          ??????? declare -x HOME="/home/oracle"
          ??????? declare -x HOSTNAME="localhost.localdomain"
          ??????? declare -x INPUTRC="/etc/inputrc"
          ??????? declare -x LANG="en_US.UTF-8"
          ??????? declare -x PWD="/home/oracle"
          ??????? declare -x SHELL="/bin/bash"
          ??????? declare -x SHLVL="2"
          ??????? declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
          ??????? declare -x SSH_CLIENT="::ffff:192.168.63.1 1474 22"
          ??????? declare -x SSH_CONNECTION="::ffff:192.168.63.1 1474 ::ffff:192.168.63.3 22"
          ??????? declare -x SSH_TTY="/dev/pts/1"
          ??????? declare -x TERM="vt100"
          ??????? ... ...
          ??? 也可以使用env命令列出所有的化境變量(包括本進程和以前進程所輸出的變量)
          ??? $ env
          ??????? MAIL=/var/spool/mail/root
          ??????? PWD=/home/oracle
          ??????? INPUTRC=/etc/inputrc
          ??????? LANG=en_US.UTF-8
          ??????? SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
          ??????? HOME=/home/oracle
          ??????? SHLVL=2
          ??????? LOGNAME=oracle
          ??????? SSH_CONNECTION=::ffff:192.168.63.1 1474 ::ffff:192.168.63.3 22
          ??????? LESSOPEN=|/usr/bin/lesspipe.sh %s
          ??????? G_BROKEN_FILENAMES=1
          ??????? OLDPWD=/root
          ??????? ... ...
          ?
          3、set命令
          ?
          ??? set命令的功能有三個:
          ?
          ??? ① 顯示迄今為止所有定義的變量,包括局部變量和公用變量
          ??? ② 設定位置參數的值
          ??? ③ 改變執行shell腳本時的選項設定
          ?
          ??? 功能①即使用不帶參數的set命令
          ??? 功能②見上文
          ??? 功能③說明如下:
          ?
          ??? 設置標志:set -標志
          ??? 關閉標志:set +標志
          ?
          ??? 標志說明:
          ?
          ??? -x:命令打印,并在前面加“+”
          ??? -v:所有命令均打印出來
          ??? -a:對被修改、創建的變量自動標記,表明要被export到后繼名命令的環境中
          ??? -e:命令以非0狀態終止時退出shell(循環/if語句除外)
          ??? -f:禁止路徑名擴展
          ??? -h:記住命令位置,便于查找(默認打開)
          ??? -k:把全部以賦值語句形式出現的參數放在命令的環境中
          ??? -n:讀命令,但不執行???
          ?
          ?
          十、參數置換變量
          ?
          ??? 參數置換變量是另一種為參數復制的方式,形式為:
          ??? [變量2]=${[變量1]op[字符串]}?? op in [ :- | := | :+ | :? ]
          ?
          ??? 注:op兩邊不能有空格
          ?
          1、[變量2]=${[變量1]:-[字符串]}
          ?
          ??? 如果[變量1]為空,則[變量2]=[字符串],[變量1]不變;否則[變量2]=[變量1],[變量1]不變
          ?
          ??? 舉例:
          ??? $ cat ex15
          ??????? echo -n "Please enter TERM1(default is ansi)->"
          ??????? read terminal
          ??????? TERM1=${ terminal:-ansi }
          ??????? echo "terminal type is $TERM1 now."
          ??????? echo "terminal=$terminal"
          ??? $ ./ex15
          ??????? Please enter TERM1(default is ansi)->(按Enter鍵)
          ??????? terminal type is ansi now.
          ??????? terminal=
          ??? $ ./ex15
          ??????? Please enter TERM1(default is ansi)->(vt100 按Enter鍵)
          ??????? terminal type is vt100 now.
          ??????? terminal=vt100
          ?
          2、[變量2]=${[變量1]:=[字符串]}
          ?
          ??? 如果[變量1]為空,則[變量2]=[字符串],[變量1]=[字符串];否則[變量2]=[變量1],[變量1]不變
          ?
          ??? 舉例:
          ??? $ cat ex16
          ??????? echo -n "Please enter TERM2(default is ansi)->"
          ??????? read terminal
          ??????? TERM2=${ terminal:=ansi }
          ??????? echo "TERM2=${TERMS2}***terminal=$terminal"
          ??? $ ./ex16
          ??????? Please enter TERM2(default is ansi)->(按Enter鍵)
          ??????? TERM2=ansi***terminal=ansi
          ??? $ ./ex16
          ??????? Please enter TERM2(default is ansi)->(vt100 按Enter鍵)
          ??????? TERM2=vt100***terminal=vt100
          ?
          3、[變量2]=${[變量1]:+[字符串]}
          ?
          ??? 如果[變量1]為空,則[變量2]為空,[變量1]不變;否則[變量2]=[字符串],[變量1]不變
          ?
          ??? 舉例:
          ??? $ cat ex17
          ??????? echo -n "Please enter TERM3(default is ansi)->"
          ??????? read terminal
          ??????? TERM3=${ terminal:+ansi }
          ??????? echo "TERM3=${TERMS3}!!!terminal=$terminal"
          ??? $ ./ex17
          ??????? Please enter TERM3(default is ansi)->(按Enter鍵)
          ??????? TERM3=!!!terminal=
          ??? $ ./ex17
          ??????? Please enter TERM3(default is ansi)->(vt100 按Enter鍵)
          ??????? TERM3=ansi!!!terminal=vt100
          ?
          4、[變量2]=${[變量1]:?[字符串]}
          ?
          ??? 如果[變量1]為空,則輸出 “[shell腳本名]:[變量1]:[字符串]”;否則[變量2]=[變量1],[變量1]不變
          ?
          ??? 舉例:
          ??? $ cat ex18
          ??????? echo -n "Please enter TERM4(default is ansi)->"
          ??????? read terminal
          ??????? TERM4=${ terminal:+ansi }
          ??????? echo "TERM4=${TERMS4}\$\$\$terminal=$terminal"
          ??? $ ./ex18
          ??????? Please enter TERM4(default is ansi)->(按Enter鍵)
          ??????? ex18:terminal:ansi
          ??? $ ./ex18
          ??????? Please enter TERM3(default is ansi)->(vt100 按Enter鍵)
          ??????? TERM3=ansi$$$terminal=vt100
          ?
          ??? 注:顯示的[變量1]是其名稱,而不是它的值。
          ?
          ?




          -The End-

          posted on 2009-01-10 23:14 decode360-3 閱讀(364) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 文山县| 天镇县| 紫阳县| 阳谷县| 海原县| 盐源县| 南开区| 信丰县| 巴东县| 尚义县| 昌邑市| 衡山县| 府谷县| 黔南| 宣化县| 额尔古纳市| 岫岩| 牡丹江市| 平原县| 崇仁县| 偏关县| 黄骅市| 大方县| 柘城县| 曲周县| 拉孜县| 龙山县| 正蓝旗| 青河县| 安阳市| 宝丰县| 宁蒗| 光山县| 通道| 阜阳市| 祥云县| 浪卡子县| 郎溪县| 嵊泗县| 乃东县| 大厂|