首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在BASH中打印整行

如何在BASH中打印整行
EN

Stack Overflow用户
提问于 2014-11-13 11:45:17
回答 3查看 622关注 0票数 3

我刚开始使用bash脚本,我一直试图打印出整行代码,但却找不到工作的方法。

这是我的密码

代码语言:javascript
复制
#!/bin/bash
MOTD=`cat /etc/motd | awk '{print $1}'`
if [ "$MOTD" = "WARNING" ]
then
    echo "Audit Criteria: Warning banner exist."
    echo "Vulnerability: No."
    echo "Details: $MOTD "
else
    echo "Audit Criteria: Warning banners does not exist."
    echo "Vulnerability: Yes."
    echo "Details: $MOTD "
fi

我的产出是:

代码语言:javascript
复制
Audit Criteria: Warning banner exist.
Vulnerability: No.
Details: WARNING:

详细信息中只出现了“警告”,而不是WARNING:Authorized uses only All activity may be monitored and reported.

我相信问题在于

代码语言:javascript
复制
MOTD=`cat /etc/motd | awk '{print $1}'` 

if [ "$MOTD" = "WARNING" ]部件,我尝试过{print$0},但仍然无法让它工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-13 11:49:38

我想您想要的是/etc/motd的第一行,而不是第一个单词。如果是这样的话,请使用以下方法:

代码语言:javascript
复制
MOTD=$(head -1 /etc/motd)

然后进行字符串比较。

代码语言:javascript
复制
if [[ $MOTD == WARNING* ]; then

有关检查字符串是否包含bash中的特定子字符串的更多信息,您可以检查String contains in bash

票数 2
EN

Stack Overflow用户

发布于 2014-11-13 11:56:20

也许用awk做整件事会更简单些:

代码语言:javascript
复制
awk 'NR==1{
    if($1=="WARNING") {
        print "Audit Criteria: Warning banner exists."
        print "Vulnerability: No."
    }
    else { 
        print "Audit Criteria: Warning banner does not exist."
        print "Vulnerability: Yes."
    }
    print "Details: " $0
    exit
}' /etc/motd

块末尾的条件NR==1exit意味着只处理文件的第一行。

上面的代码与bash脚本非常相似,但是可以使用变量使其更短:

代码语言:javascript
复制
awk 'NR==1{if($1=="WARNING"){b="exists";v="No"}else{b="does not exist";v="Yes"}
printf "Audit Criteria: Warning banner %s.\nVulnerability: %s.\nDetails: %s\n",b,v,$0
exit}' /etc/motd
票数 2
EN

Stack Overflow用户

发布于 2014-11-13 11:52:18

您只使用变量MOTD,而且它只有值警告。

代码语言:javascript
复制
#!/bin/bash

MOTD=`cat /etc/motd | awk '{print $1}'`    
if [ "$MOTD" = "WARNING" ]    
then
    echo "Audit Criteria: Warning banner exist."        
    echo "Vulnerability: No."       
    echo "Details: `cat /etc/motd` "    
else        
    echo "Audit Criteria: Warning banners does not exist."      
    echo "Vulnerability: Yes."      
    echo "Details: `cat /etc/motd`"    
fi

或者,如果在/etc/motd中有多行,并且只需要打印一行的话。

代码语言:javascript
复制
#!/bin/bash

MOTDL=`grep WARNING /etc/motd`
MOTD=`cat /etc/motd | awk '{print $1}'`    
if [ "$MOTD" = "WARNING" ]    
then
    echo "Audit Criteria: Warning banner exist."        
    echo "Vulnerability: No."       
    echo "Details: $MOTDL "    
else        
    echo "Audit Criteria: Warning banners does not exist."      
    echo "Vulnerability: Yes."      
    echo "Details: $MOTDL"    
fi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26908165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档