
1、使用grep -v "^#" 来去掉注释行
其中:-v 就是取相反的 ^# 表示以#开头的行eg. grep -v "^#" /etc/vsftpd/vsftpd.conf (也可以使用“>”来重写配置文件)
2、有时也会连同空行一起去掉,使用管道符来完成(^$表示空行 )
eg. grep -v "^#" httpd.conf | grep -v "^$" >>vsftpd.conf
上面用了2次 grep 过滤命令 ,也就是把空行和注解行过滤掉,再把剩下的内容追加保存为原来的配置文件 vsftpd.conf 这个时候就文件里的内容就没有注解行和空行了。
扩展资料:注意事项
1、^一行的开始 ^d以开头的 ^..1 第三个为1的字符 ^字符要放在匹配的字符前面
2、$一行的末尾 ^$ 表示空行 ^.$匹配一行一个字符的 $字符要放在匹配的字符后面
3、*匹配任意个字符 包括0个字符 .表示单个字符
4、\可以屏蔽一个特殊的字符 \*\.pas 这里的*是特殊字符,这样就表示*.pas这个文件
5、逗号可以分割不同的匹配字符如[S,s]表示S或者s都可以
6、-表示一个范围,[1-9],[a-z],[A-Z] [1-9 A-Z a-z]任意的字符或者数字
A\{2\}B 表示A出现了2次 AAB
A\{4,\}B 表示A至少出现4次 AAAAB,AAAAAB
A\{2,4\}B 表示A出现2-4次 AAB AAAB AAAAB
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} 0-999.0-999.0-999.0-999
cat server.conf |grep -v "^[#,]" |grep -v "^$"
#!/bin/bash#filename:simple-useradd.sh
##(1)只使用一个参数,其他情况在退出后打印一条提示信息
## 这个要求有点不明确,这是一个根据提示来执行的脚本,正常应该是不用传递参数的。
if [ $# -ne 0 ]
then
echo "Usage: $0"
exit 1
fi
##(2)检查/etc/passwd文件,屏幕输出UID的消息
##定义函数DisplayUID
function DisplayUID(){
cat /etc/passwd
}
##(3)检查/etc/group文件,屏幕输出GID信息
##定义函数DisplayGID
function DisplayGID(){
cat /etc/passwd
}
##(4)用户从键盘输入信息--新用户的描述、使用shell、UID、GID, 并把这些信息分别添加到/etc/passwd、/etc/group、/etc/shadow中, 创建用户的主目录/home/***---***为用户名
##定义函数InputNewUser
function InputNewUser(){
echo "---Input new user Menu"
read -p "username:" INusername
read -p "shell:" INshell
read -p "UID:" INUID
read -p "GID:" INGID
echo "开始在/etc/passwd添加帐号信息"
echo "开始在/etc/group添加帐号信息"
echo "开始在/etc/shadow添加帐号信息"
echo "创建用户目录…………"
useradd -s $INshell -u $INUID -g $INGID -m $INusername ##useradd用来根据输入,创建新用户
if [ $? -ne 0 ] #对添加结果进行判断
then
echo "添加用户出错了"
exit 1
fi
}
##(5)设置新用户的密码
##定义SetPassWord
function SetPassWord(){
local INusername
echo "SetPassWord:"
read -p "username:" INusername
passwd $INusername
}
while true ## 进入菜单循环
do
cat<<-EOF ## 打印菜单
1------------ Display UID
2------------ Display GID
3------------ Input new user
4------------ Set password
"按Qq退出"
EOF
read -p "choice:???" choice #接收用户输入
case $choice in # 根据用户选择来执行相应的函数
1) DisplayUID
2) DisplayGID
3) InputNewUser
4) SetPassWord
[Qq]) echo "bye "exit 0
esac
done
这个脚本还有如下问题:
1、”只使用一个参数,其他情况在退出后打印一条提示信息”这个需求不明确,不知道是啥意思,正常情况下,像这种脚本都是不用位置参数的,也可能我不理解题目的意思;
2、脚本还不够严谨,有一些异常没有捕获也没有重定向,不过如果你是交作业的话就问题不大咯。
function changename(){ -- 俺是淫荡的函数changename(改名字)if [ -z $2 ]then -- 如果第二个参数为空
echo "lack function parameter " -- 告诉您了:参数不够
return -1 -- 返回个-1给您
fi -- 邪恶的判断结束了
mv -f $1 $2 -- 别说啥了,把文件1改名成文件2吧
return 0 -- 返回个0给您
} -- 淫荡的函数changename结束了
function change() -- 俺是第二淫荡的函数change(改变)
{ -- 函数开始咯
ofileName= # old file name -- 有个变量ofileName
nfileName= #new file name -- 有个变量nfileName
ls -l >a.txt -- 把当前目录下的文件列出来写到文件a.txt
index=0 -- 俺是变量index,初始值是0
while read line -- 结合done<a.txt,俺是说俺要开始从a.txt一行一行读到变量line里了
do -- 开始吧!
index=`expr ${index} + 1` -- 开始计数吧,完事得靠这个考勤挣工资呢
if [ ${index} -eq 1 ] then -- 如果是第一个文件的话
continue # ignore the first line of 'ls -l' -- 继续,啥也不干
fi -- 邪恶的判断又结束了
a=($line) -- 把line这个变量里边的东西拆了,放到数组a里边
ofileName=${a[8]} -- 把a的第8个元素给ofileName
pos=`expr index ${ofileName} "."` -- ofileName里有木有.啊?在啥位置?请告诉pos
if [ ${pos} -eq 0 ] then -- 如果pos是0,也就是说木点.!!!
nfileName="${ofileName}[${a[3]}]" -- 把ofileName和a的第三个元素拼吧拼吧给nfileName(原文件名加上[文件拥有者的名字])
else -- 或者
owner="[${a[3]}]." -- owner是a的第三个元素加个.
nfileName="${a[8]/./${owner}} " -- 把a的第8个元素里边的点.换成owner这个变量值
fi -- 邪恶的判断再次结束了
echo "nfilename=${nfileName}" -- 告诉你nfilename=变量nfileName的值
changename ${ofileName} ${nfileName} -- 叫changename函数起床干活,参数一时ofileName,参数二十nfileName
done<a.txt -- 参见N行前的解释
} -- 淫荡的函数change结束了
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)