我正在尝试获取服务器上将用于备份的所有数据库的列表。以下是我试图打印数据库列表的代码片段,但出现错误。如何解决?添加双方括号不能解决问题。
我已经调查了一些类似的问题,但我不知道。
grep:字符类语法为[[:space:]],而不是[:space:]
#!/bin/sh -
IFS='
'
OLDPATH="$PATH"
PATH=/sbin:/bin:/usr/bin
export PATH
MUSER=root
MPASS='sfdsfdf'
DBLIST=$(mysql -u${MUSER} -p${MPASS} -e 'show databases;' | grep [:alphnum:] | grep -v Database)
for base in ${DBLIST}; do
echo $base
done
答案 0 :(得分:3)
产生错误的行是:
MediaSource
运行第一个grep时,它会注意到在冒号之间有一对包含文本的方括号。它猜测用户打算将字符类放在方括号表达式中,并给出了执行此操作的正确方法的示例。
方括号表达式是DBLIST=$(mysql -u${MUSER} -p${MPASS} -e 'show databases;' |\
grep [:alphnum:] | grep -v Database)
字符列表 [
。
编写一个字符类:]
类 [:
,以获取类的某些值。
通过将字符类(例如:]
)放置在方括号表达式内 来使用该字符类以及任何其他要匹配的字符。因此,要匹配空格和数字到1到3,可以写一个:[:space:]
不幸的是,代码中还有另一个错误,那就是没有像“字母”这样的字符类。因此,纠正包围没有帮助!
但是有一个类:[[:space:]123]
如果这是预期的类,则应将第一个grep修改为:
[:alnum:]
请注意,括号由外壳程序特殊对待(它们可以扩展为文件名),因此引用任何出现的位置都更安全:
grep [[:alnum:]]