linux的shell编程中如何将一段命令的结果封装成一个变量?

2025-05-07 16:40:42
推荐回答(5个)
回答(1):

直接赋值给变量就可以了啊,变量可以保存多行字符串内容的。使用变量的时候记得将其放在双引号里就行了。

var=`dmesg | grep eth`
echo "$var"

一对反引号(ESC下面的键),表示优先执行其中的命令,执行完成后将结果赋值给var变量。

字符串变量使用的时候加双引号,作为一个整体看待。

回答(2):

[root@YYStorage2 ~]# cat test.sh
#!/bin/sh
dmesg|grep $1
[root@YYStorage2 ~]# chmod +x test.sh
[root@YYStorage2 ~]# ./test.sh eth

e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection

e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None

eth0: no IPv6 routers present

ADDRCONF(NETDEV_UP): eth0: link is not ready

e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None

ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

eth0: no IPv6 routers present

e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None

eth0: no IPv6 routers present


解释一下吧:在shell中的变量有$?,$1...$9

$1代表第一个变量,$2代表第二个,依次类推,一直到$9

回答(3):

至少有两种方式:

  1.  命令放在``中 (一般键盘1左边那个键),如

    echo `dmesg | grep eth`

  2. 命令放在$()中,如

    echo $(dmesg | grep eth)

回答(4):

可以如下保存到变量varname中
varname=`dmesg | grep eth`
如果返回的是多行,可以保存到数组中
array=($(dmesg | grep eth))
然后用for循环获取数组中各个值
len=${#array[@]}
for((i=0; i<$len; i++))
do
oneline=${array[$i]}
done

回答(5):

var=`ls -l *.* | wc -l`

var=$(ls -l *.* | wc -l)