文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>shell变量

shell变量

时间:2010-09-14  来源:fjliufeng

 

shell 变量 1.用户自定义变量(用户数据存储)  
#NAME=feng 定义一个变量NAME, 其值为feng       #echo $NAME -----à输出feng   【引用变量时用$符号】
      Shell(/bin/bash中变量赋值从右向左!)      
#X=$Y Y=y       #echo $X ----à无任何输出          #B=C A=$B       #echo $A --à输出C
          unset 可以删除变量值      
#NAME=feng       #set |grep –i name       #unset NAME       #set |grep –i name ----à输出内容中没有NAME=feng
     2. 位置变量(shell脚本参数)       在shell脚本中用$1~$9表示,$0通常表示当前执行的脚本名称       #touch useradd.sh
#!/bin/bash useradd feng$1 useradd feng$2
#sh useradd.sh 3 5 ----à将会创建用户feng3 和feng5,脚本后面的参数3 5将按顺序替换脚本里的$1 和$2 ,依次类推。    3..shell变量替换 1)    除了a-zA-Z0-9_几乎都可以作单词边界。这些功能有时候会在程序中有意想不到的作用。例如:
# a=bcd # echo $a.phap ------àbcd.php # echo $a%b ---------àbcd%b # echo /$a/bc -------à/bcd/bc  
      2) 变量替换${} Shell 之所以强大,其中的一个因素是它可以在命令行中对变量作替换处理。在命令行中使用者可以使用 $ 符号加上变量名称,将变量值给替换出来,然后再重新组建命令行。 一般情况下,$var 与 ${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围,比方说:
# A=B # echo $AB-----à输出为空 # echo ${A}B---à输出AB  
  A、掐头去尾 假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt 我们可用 ${ } 分别替换获得不同的值: ${file#*/}        从变量file的字符串左边开始删除字符,直到第一个“/”:------------à输出dir1/dir2/dir3/my.file.txt ${file##*/}        从变量file的字符串左边开始删除字符,直到最后一个“/”:--------à输出my.file.txt ${file#*.}        从变量file的字符串左边开始删除字符,直到第一个“.”:--------à输出file.txt ${file##*.}        从变量file的字符串左边开始删除字符,直到最后一个“.”:----------à输出txt ${file%/*}       从右部开始拿掉字符,直到遇到(从右部数起的)第一个“/” :-------à输出/dir1/dir2/dir3 ${file%%/*}      从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“/”: ------à输出空值 ${file%.*}        从右部开始拿掉字符,直到遇到(从右部数起的)第一个“.”:-----à输出/dir1/dir2/dir3/my.file ${file%%.*}        从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“.”: ------à输出/dir1/dir2/dir3/my   记忆的方法为: #                        是去掉左边(在键盘上 # 在 $ 之左边) %                        是去掉右边(在键盘上 % 在 $ 之右边) 单一符号是最小匹配﹔两个符号是最大匹配。 同时要注意:在 # 和 % 后可以使用任何shell中的模式匹配。并非仅限于*、.、/。   B、字串提取 ${file:0:5}        提取最左边的 5 个字节:/dir1 ${file:3}                去掉前面3个字符 ${file:5:5}        提取第 5 个字节右边的连续 5 个字节:/dir2   C、字符串替换 ${file/dir/path}                将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt ${file//dir/path}                将全部 dir 提换为 path:/path1/path2/path3/my.file.txt   D、通吃变量名 ${!prefix*}                        代表所有以prefix开始的变量名,各变量名称之间以空格符分隔 $ ab=1 abc=2 abcd=3 $ echo ${!ab*}                        输出:ab abc abcd   E、变量赋值(没设定、空值、非空值)  变量替换的值也可以是` `括起来的命令: $USERDIR={$Mydir:-`pwd`}    
${#myvar}                                计算出变量值的长度 ${myvar=default}                 若 $myvar 没设定,则输出并取值 default。(保留空值及非空值) ${myvar:=default}                 若 $myvar 没设定或为空值,则输出并取值 default。(保留非空值) ${myvar+default}                若 $myvar 设定为空值或非空值,输出但不取值 default,否则返回空(null)。 ${myvar:+default}                若 $myvar 设定为非空值,输出但不取值 default,否则返回空(null)。 ${myvar-default}                若 $myvar 没设定,输出但不取值 default。(保留空值及非空值) ${myvar:-default}                若 $myvar 没设定或为空值,输出但不取值 default。(保留非空值) ${myvar?default}        若 $myvar 没设定,将 default 输出至 STDERR。(不取值,保留空值及非空值) ${myvar:?default}                若 $myvar 没设定或为空值,将 default 输出至STDERR。(不取值,保留非空值) Have time to study!
  F、bash 的组数(array)处理 一般而言,A="a b c def" 这样的变量只是将 $A 替换为一个单一的字符串,但是改为 A=(a b c def) ,则是将 $A 定义为组数。  
# A=(a bb ccc dddd) # echo ${A[@]} ------à输出 a bb ccc dddd #echo ${A[0]} -----à输出第一个组数 a #echo ${A[1]} ----à输出第二个组数 bb #echo ${#A[2]} ---à 输出第三个组数字符串长度 3 #A[1]=xyz -----à替换第二个组数为xyz  
相关阅读 更多 +
排行榜 更多 +
坦克战争世界

坦克战争世界

模拟经营 下载
丛林反击战

丛林反击战

飞行射击 下载
几何飞行安卓版

几何飞行安卓版

飞行射击 下载