在Unix中编写循环,读取用户输入是或否

时间:2015-03-16 18:44:14

标签: bash shell unix if-statement

我正在尝试编写一个程序来显示正在运行的进程并询问用户是否要杀死每个进程。这是我的代码

#! /bin/bash

ps

PID TTY          TIME CMD
1681 pts/1    00:00:00 tcsh
1690 pts/1    00:00:00 bash
1708 pts/1    00:00:00 script
1710 pts/1    00:00:00 ps

ps | while read line; do

id=$(echo $line | cut -d' ' -f 1)
name=$(echo $line | cut -d' ' -f 4)

echo 'process ID: ' $id 'name: ' $name
echo -n 'Would you like to kill this process? Yes/No: '
read word < /dev/tty
if [$word == 'yes' ]; then
kill $id

fi

done

我有两个问题..当我输入no时,我收到错误line 10 [no: command not found。第二个是当我将变量分配给id和name时,它会自动读取给我的第一行

process ID: name: cmd

2 个答案:

答案 0 :(得分:1)

您的if错了:

if [ "$word" = "yes" ]
    ^^^^^^^^--note the space + quotes around the var.

同样,[不会使用==进行相等性测试。它只是=

答案 1 :(得分:0)

首先,你不应该在那一行上做< /dev/tty部分; read word就足够了。

其次,你只需在开头括号后的if子句中加一个空格 - 就像这样:

if [ $word == 'yes' ]; then