如何检查字符串是否不包含某些字符?

时间:2019-05-07 10:29:10

标签: bash

我有bash脚本:

#!/bin/bash

if [ -z $1 ] || [ -z $2 ] || [ -z $3 ]
then
{ echo >&2 "Required parameters missing "; exit 1; }
fi

echo "Success"

脚本需要3个必需参数。但我还需要确保$ 1不包含。 $ 2和$ 3不包含。和/和\

如何实现?

1 个答案:

答案 0 :(得分:3)

首先,使用${name?:msg}形式的参数扩展来验证您具有非空值:

: ${1?:Missing parameter 1}
: ${2?:Missing parameter 2}
: ${3?:Missing parameter 3}

然后,使用[[ ... ]]命令执行模式匹配。

if [[ $1 = *.* ]]; then
  echo >&2 "Invalid parameter 1 "
  exit 1
fi

if [[ $2 = *[./\\]* ]]; then
  echo >&2 "Invalid parameter 2 "
  exit 1
fi

if [[ $3 = *[./\\]* ]]; then
  echo >&2 "Invalid parameter 3 "
  exit 1
fi

如果您需要坚持使用POSIX构造,请使用case语句代替[[ ... ]]

case $1 in
  *.*) echo >&2 "Invalid parameter 1"; exit 1;;
esac

case $2 in
  *[./\\]*) echo >&2 "Invalid parameter 2"; exit 1;;
esac

case $3 in
  *[./\\]*) echo >&2 "Invalid parameter 3"; exit 1;;
esac