有条件的shell脚本

时间:2016-04-21 11:11:01

标签: shell

OS: ubuntu 14.04

我有以下脚本:

#!/bin/bash
read -rsp $'Press Y/y to execute script or any other key to exit...\n' -n1 key
if [ "$key" != 'y' ] || [ "$key" != 'Y' ] ; then
    echo 'You did not press the y key'
    exit
fi
echo 'some other stuff'

无论我按什么键,它都会回响"你没有按下y键"

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您需要||代替if key is not 'y' AND if key is not 'Y' then: error ,因为逻辑应该说:

if [ "$key" != 'y' ] && [ "$key" != 'Y' ] ; then
    echo 'You did not press the y key'
    exit
fi

<强>代码:

bash

如果您正在使用if [[ $key != [yY] ]]; then echo 'You did not press the y key' exit fi ,那么您可以将其缩短为:

{{1}}

答案 1 :(得分:2)

阿努巴瓦说的是什么。此外,case可能是您if声明的一个很好的替代选择:

#!/usr/bin/env bash

read -rsp $'Press Y/y to execute script or any other key to exit...\n' -n1 key

case "$key" in
  Y|y)
    echo 'You DID press the y key. Proceeding.'
    ;;
  *)
    printf "I can't handle the '%s' key!\n" "$key"
    exit 1
    ;;
esac

echo 'some other stuff'

顺便提一下,除read选项外,这与POSIX兼容,因此它比仅使用bash的代码更容易移植(就像使用[[ ... ]]条件的任何内容一样)。