当我做一些SDR项目,但又想在计算机上看电视时,当我想使用SDR时,我需要一个脚本来注释modprobe中文件中的黑名单行,而当我需要对这些行进行注释时,我想看电视。
所以我基于互联网上的多次阅读来编写脚本,但不幸的是,它在我的机器上不起作用。 希望您能帮助我修复它。
请注意,单个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注释(或取消注释,视情况而定)
答案 0 :(得分:3)
主要问题是您的脚本实际上没有执行任何操作。它定义了一个变量和两个函数,然后退出。
如果您希望脚本检查命令行参数并调用相应的函数,则必须手动执行。
例如:
case "${1:?missing command argument}" in
comment) comment;;
uncomment) uncomment;;
*) echo "$0: bad command: $1" >&2; exit 1;;
esac
其他说明:
请勿将ALL_UPPERCASE
用于您的shell变量。按照惯例,这些保留给系统和外壳本身使用。更好:
file="/etc/modprobe.d/blacklist-dvb.conf"
通常,除非您真的知道自己在做什么,否则应该用引号("$file"
括起来。
您的正则表达式锚定在字符串(^
)的开头。 /g
标志是毫无意义的。
通常,使用单引号比使用双引号更好。 '...'
带来的惊喜更少,因为一切都是按字面意义进行的:
sed -i 's/^/#/' "$file"
sed -i 's/^#//' "$file"
答案 1 :(得分:0)
好的,因为我无法在bash中运行它,所以我使用了python,它可以完美地完成工作:)
对于需要帮助的其他人,这是我的脚本:
#!/usr/bin/python
import subprocess
import sys
def comment():
subprocess.call(["sed -i 's/^/#/g' /etc/modprobe.d/blacklist-dvb.conf"], shell=True)
def uncomment():
subprocess.call(["sed -i 's/^#//g' /etc/modprobe.d/blacklist-dvb.conf"], shell=True)
# Print
print("Script name ", sys.argv[0])
print("Argument 1 ", sys.argv[1])
argument_1 = sys.argv[1]
if argument_1 == "comment":
print("in comment")
comment()
elif argument_1 =="uncomment":
uncomment()
else:
print("usage = python switcher.py comment")