因为我在做一些 SDR 项目,但有时也想在我的电脑上看电视,所以我需要一个脚本来注释 modprobe 文件中的黑名单行,当我想使用 SDR 时,我需要取消注释这些行我想看电视。
所以我根据我在互联网上的多次阅读编写了一个脚本,但不幸的是它在我的机器上不起作用。
我希望你能帮我解决它。
请注意,单个 sed 命令确实有效(使用简单引号,因为在 bash 中我们需要双引号)
#!/bin/bash
# your target file
FILE="/etc/modprobe.d/blacklist-dvb.conf"
# comment target
comment() {
sed -i "s/^/#/g" $FILE # comment all lines
}
# uncomment target
uncomment() {
sed -i "s/^#//g" $FILE
}
然后我将脚本启动为:./my_script.sh 评论(或取消评论,视情况而定)
主要问题是您的脚本实际上没有做任何事情。它定义了一个变量和两个函数,然后就退出了。
如果您希望脚本检查命令行参数并调用相应的函数,则必须手动执行。
例如:
case "${1:?missing command argument}" in
comment) comment;;
uncomment) uncomment;;
*) echo "$0: bad command: $1" >&2; exit 1;;
esac
其他说明:
不要为您的 shell 变量使用 ALL_UPPERCASE
。按照惯例,这些是为系统和 shell 本身保留的。更好:
file="/etc/modprobe.d/blacklist-dvb.conf"
作为一般规则,变量扩展应该被引用 ("$file"
),除非您真的知道自己在做什么。
您的正则表达式锚定到字符串的开头 (^
)。 /g
标志毫无意义。
一般来说,使用单引号比使用双引号更好。 '...'
的惊喜更少,因为一切都是按字面意思理解的:
sed -i 's/^/#/' "$file"
sed -i 's/^#//' "$file"