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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux的shell编程中如何将一段命令的结果封装成一个变量?相关的知识,希望对你有一定的参考价值。

比如我创建一个test.sh文件
文件中有一段是dmesg | grep eth 我如何将这段命令的结果封装成一个变量
变量名自拟

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

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

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

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

参考技术A [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

参考技术B

至少有两种方式:

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

    echo `dmesg | grep eth`

    命令放在$()中,如

    echo $(dmesg | grep eth)

参考技术C 可以如下保存到变量varname中
varname=`dmesg | grep eth`
如果返回的是多行,可以保存到数组中
array=($(dmesg | grep eth))
然后用for循环获取数组中各个值
len=$#array[@]
for((i=0; i<$len; i++))
do
oneline=$array[$i]
done
参考技术D var=`ls -l *.* | wc -l`

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

Linux Shell脚本编程--cut命令

cut

cut命令可以从一个文本文件或者文本流中提取文本列。

cut语法

[[email protected] ~]# cut -d‘分隔字符‘ -f fields <==用于有特定分隔字符
[[email protected] ~]# cut -c 字符区间            <==用于排列整齐的信息
选项与参数:
-d  :后面接分隔字符。与 -f 一起使用;
-f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c  :以字符 (characters) 的单位取出固定字符区间;

 

PATH 变量如下

[[email protected] ~]# echo $PATH
/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
# 1 | 2       | 3   | 4       | 5            | 6            | 7

 

将 PATH 变量取出,我要找出第五个路径。

#echo $PATH | cut -d ‘:‘ -f 5
/usr/local/bin

 

将 PATH 变量取出,我要找出第三和第五个路径。

#echo $PATH | cut -d ‘:‘ -f 3,5
/sbin:/usr/local/bin

 

将 PATH 变量取出,我要找出第三到最后一个路径。

echo $PATH | cut -d ‘:‘ -f 3-
/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games

 

将 PATH 变量取出,我要找出第一到第三个路径。

#echo $PATH | cut -d ‘:‘ -f 1-3
/bin:/usr/bin:/sbin:
 

 

将 PATH 变量取出,我要找出第一到第三,还有第五个路径。

echo $PATH | cut -d ‘:‘ -f 1-3,5
/bin:/usr/bin:/sbin:/usr/local/bin

 

实用例子:只显示/etc/passwd的用户和shell

#cat /etc/passwd | cut -d ‘:‘ -f 1,7 
root:/bin/bash
daemon:/bin/sh
bin:/bin/sh

 

以上是关于linux的shell编程中如何将一段命令的结果封装成一个变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何将一shell脚本中的每一步命令执行结果输出到指定日志文件中

如何将一shell脚本中的每一步命令执行结果输出到指定日志文件中

Linux Shell脚本编程--cut命令

Linux Shell脚本编程--cut命令

linux shell脚本,怎样变量传递执行结果

linux shell中如何让终端输出结果后暂停一下 要不一闪就关了