shell里的``$()${}expr$(()) shell中expr


所有UNIX命令,要取结果或输出,都要用$( )或反引号``
tt=` file test.sh`
echo $tt
#sh test.sh
test.sh: ASCII text

tar -zcvf lastmod.tar.gz `find. -mtime -1 -type f -print`
将过去24小时(-mtime–2则表示过去48小时)内修改过的文件tar在一起

反引号` `和$()缺陷也相同,没回车换行,容易把多行合并
[mac@machome ~]$ vi test.sh

echo `ps -ef | grepsyslog`
[mac@machome ~]$ sh test.sh
root 1363 1 0 12:15 ? 00:00:00 syslogd -m 0 mac 15032 15030 0 18:13pts/2 00:00:00 grep syslog

[macg@machome ~]$ vi test.sh

var=$(ls -l)
echo $var
[macg@machome ~]$ sh test.sh
total 44 -rw-rw-r-- 1 macg macg 126 Jun 8 23:40 1 -rw-rw-r-- 1 macgmacg 0 Jun 8 17:53 100 -rw-rw-r-- 1 macg macg 16 Jun 9 19:00111.txt -rw-rw-r-- 1 macg macg 15 Jun 9 19:00 22.txt -rw-rw-r-- 1macg macg 15 Jun 9 19:00 33.txt -rw-rw-r-- 1 macg macg 23 Jun 1219:20 test.sh

wc-l常与$( )合用取其输出,计算行数,进而确定循环次数
count=$(more iftmp|wc -l)
while [ $i -le $count ]


echo +$( )――echo内也可执行命令,并通过$( )取该命令的输出再显示
常见使用:echo内,用$( )取awk和sed对某些命令修饰后的效果
[macg@machome ~]$ vi test
#choose a iinterface to config
/sbin/ifconfig -a | awk'$2=="Link" {print($1,$3)}' >iftmp
echo "choose one of interface to config"
i=1
count=$(more iftmp|wc-l)
while [ $i -le $count ]
do
echo "$i)-------- $(sed -n"${i}p" iftmp)"
用sed 修饰输出
ii=$(($i+1))
done
[macg@machome ~]$ sh test

choose one of interface to config
1)-------- eth0 encap:Ethernet
2)-------- lo encap:Local
3)-------- sit0 encap:IPv6-in-IPv4
give the interface a host name[such as:xxx-hme0]:

${ }和$()的区别:${ } 是做什么用的?--------避免在echo中变量被连读
${i}是区分其后紧接的字符串,避免“连读”
$ vi ttt.sh

GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|"
GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|"
echo $GONE
$ sh ttt.sh
(ServerType|BindAddress|Port|AddModule|ClearModuleList|AgentLog|RefererLog|RefererIgnore|FancyIndexing


${i}可以在任何场合替代普通变量$i
ttt=${REMOTEHOST}
echo ${ttt}
ttt=$REMOTEHOST
echo $ttt
[macg@localhost ~]$ sh ttt.sh
192.168.1.11
[macg@localhost ~]$ sh ttt.sh
192.168.1.11

expr数学表达式
shell语言里没有运算公式,必须借助expr语句实现:
expr 变量 ‘+-x/’ 变量
expr $a '+' $b
expr 常数 ‘+-x/’ 常数
[mac@machome ~]$ expr 3 '+' 2
5
运算符号都要加引号,单引号双引号均可
输出是结果


为什么if expr 3 '+' 2 得5,但if仍走then ?非0应该走else啊
因为expr表达式返回的是"返回值",不是"结果"
[mac@machome ~]$ vi test.sh
expr 3 '+' 2
shell里的``$()${}expr$(()) shell中expr
echo $?
[mac@machome ~]$ sh test.sh
5 输出5
0 返回0只要加法成功,返回值就是0,0为真

expr 表达式计算完后如何获得结果?——用 $(expr … ) 或反引号`expr …`
其实就是取其输出,expr的输出就是结果
var = expr $a '+' $b
echo "final is $var"
var=$(expr $a '+' $b)
echo "final is $var"
test.sh: line 7: var: command notfound
加法完成后结果赋值出错
final is
final is 7


expr在if语句里,不能用 [ ],因为这里把它当作command
[mac@machome ~]$ vi test.sh
if [ expr 3 '+' 2] ; then
echo no5
else
echo is5
fi
[mac@machome ~]$ sh test.sh
test.sh: line 1: [: too many arguments
is5
改成
[mac@machome ~]$ vi test.sh
if expr 3 '+'2 ;thenexpr 3 '+'2相当于command
echo no5
else
echo is5
fi
[mac@machome ~]$ sh test.sh
5
no5

不过如果要进行结果判定,加$(),就必须用[ ]了,因为把它当作表达式了
[macg@machome ~]$ vi test.sh
if [ $(expr 3 '+' 2) != 5];then而且[和$中间必须有空格
echo no5
else
echo is5
fi
[macg@machome ~]$ sh test.sh
is5


另一种运算格式i++如何实现?------ i=$(($i+1))
while [ $i -le $count]
do
command
i=$(($i+1))
done


(( ))与[]作用完全相同
echo input:
read i
i=$(($i+1))
echo$i
echo input:
read i
i=$[$i+1]
echo $i
[macg@localhost ~]$ sh ttt.sh
input:
6
7
[macg@localhost ~]$ sh ttt.sh
input:
6
7


反面证明(( ))与[ ]完全相同--------if (( ))
if (( $# != 3 )); then
echo "usage: $0 host user passwd"
fi
if [ $# != 3 ]; then
echo "usage: $0 host user passwd"
fi
[macg@localhost ~]$ sh ttt.sh 1 2
usage: ttt.sh host user passwd
[macg@localhost ~]$ sh ttt.sh 1 2
usage: ttt.sh host user passwd




  

爱华网本文地址 » http://www.413yy.cn/a/25101010/34362.html

更多阅读

联通黑名单是永久的吗 淘宝建立黑名单 永久封杀售假网店

在淘宝上经营网店,一样得守信用。记者昨日从淘宝网了解到,淘宝日前推出新政策,售假者一经核实将被列入黑名单,甚至将面临终身取消在淘宝开店的资格。淘宝内部人士透露,如果证据确凿,网站会将卖家拉入黑名单,另外,售假数量、金额达到一定程

wings你们准备好了吗 市场突击队准备好了吗

在每个企业的市场营销活动中,对于部分新市场或者问题严重的市场都会运用聚焦法则采取集中人力、物力、财力的办法来实现市场的开发和突围,因此也就有了一只相应的队伍来进行这项工作,我们通常称这只队伍为“市场突击队”,对于企业来讲

aaa电池是几号电池 AAA电池 AAA电池-?基本内容

AAA电池是电池的一种型号,是一种美国的干电池标准,中国大陆的7号电池或台湾的4号电池标准与其兼容。AAA电池是一种常见的电池,比AA电池小。常用于体积较小,耗电量不太高的电子产品如MP3播放器、小型遥控器等。既有一次性的碱性电池,也有

电饼铛做煎饼果子 煎饼果子怎样用电饼铛做

  看电视里播煎饼果子就嘴馋了,想自己动手做做。没有煎饼果子神器,自己在家用电饼铛也能做煎饼果子!  原料:  普通面粉 8汤匙 绿豆粉 2汤匙 小米面 2汤匙 水 适量 鸡蛋 1个 榨菜、甜面酱、酱豆腐、韭菜花、黑芝麻适量  做

健身运动的误区 健身运动的七大误区

   运动健身当然是一件对身体非常有好处的事情,但是好的事情不代表没有弊端,小编要给大家说说运动健身的七大误区。  1、不要形成锻炼癖。  在一般情况下,初次参加健身训练的人都会感到非常兴奋,特别是当锻炼出效果的时候

声明:《shell里的``$()${}expr$(()) shell中expr》为网友用你的目光看海分享!如侵犯到您的合法权益请联系我们删除