检查条件然后自动回答问题

时间:2014-02-17 10:23:39

标签: linux bash awk pipe heredoc

我在bash中有一个问题:

这是检查条件的方法,然后自动回答heredoc中发生的问题吗?

我知道两种方式可以自动回答问题(通过passwd命令制作示例):

1)管道

<password> | passwd <username>

2)here文档

passwd <username> <<EOF
<password>
<password>
EOF

现在,问题

如何设置条件来回答它们///

if [ `passwd` -eq 0 ]; then
    <<EOF
     <password>
     <password>
   EOF
fi

例如,这是不可能的,任何想法?

#!/bin/bash                                                                                                                                                                      

mdadm mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdc1 /dev/sdd1 /dev/sde1 --spare-devices=1 /dev/sdf1
if [ $? -eq 0 ]; then
    <<EOF                                                                                                                                                                        
    ok                                                                                                                                                                           
EOF                                                                                                                                                                              
elif [ $? -ne 0]; then
    <<EOF                                                                                                                                                                        
    failed                                                                                                                                                                       
EOF                                                                                                                                                                              
fi
欢迎

heredocspiping或任何其他解决方案,

我想首先检查能够回答问题的条件

由于

2 个答案:

答案 0 :(得分:3)

使用 expect 命令可能吗?

http://www.thegeekstuff.com/2010/12/5-expect-script-command-line-argument-examples/

以下是FTP的一个小例子,因为我不熟悉mdadm。您可以看到它根据服务器的响应做了不同的事情 - 我认为,这是您要做的事情。

  # Connect to the FTP server using the "spawn" command.
  spawn ftp $hostname

  # Wait for a login prompt.
  expect -re "(Name|login|Login|Username).*:.*" {

      # Login prompt received. Send username to server.
      exp_send "$username\r"
      exp_send_user "sent username\n"
  } eof {

      # No login prompt received. Display an error.
      exp_send_user "could not connect\n"
  }

答案 1 :(得分:-1)

我假设您要检查您的操作结果。您可以分两步完成此操作:

passwd <user> <<EOF
     <password>
     <password>
EOF

if [ $? -eq 0 ]; then
    echo "Great success"
fi

$?包含最后执行语句的返回码。