shell脚本注释
A. 求助这段shell脚本里的注释什么意思
#! /bin/bash:表示所使用的 SHELL 是哪一种版本的 SHELL。在该 SHELL 文件中使用的是 bash,其它的还有:C-SHELL,即:csh。
-ne:不同,即:!=
-gt:大于,即:>
-lt:小于,即:<
-le:小于或者等于,即:<=
该 bash 文件中的注释的功能就是:对 bash 部分运算符的总结(因为还有:-eq:即:相等、-ge:大于或者等于)
B. shell脚本里语句解释
grep做文本过滤,查找操作
sed做文本替换操作,将 [{}="] 这个[ ]集合中的任意内容,只要出现都替换为空格。
awk筛选出每行的特定字段,$5, $6, $9 $10 $11,打印出来并以空格分隔。
sort排序
uniq去重
结果保存到mk_RTDB-nef.tmp文件。
| 就是个管道符,把上一个命令的处理结果传递给下一个命令继续处理。
要知道每步的结果,可以一个个地尝试:
比如,先试试:
grep ^SERVER /SYSTEM//opf/absolute/lib/system_conf_mlt.txt
再试试:
grep ^SERVER /SYSTEM//opf/absolute/lib/system_conf_mlt.txt \
| sed 's/[{},="]/ /g'
再试试:
grep ^SERVER /SYSTEM//opf/absolute/lib/system_conf_mlt.txt \
| sed 's/[{},="]/ /g' \
| awk '{print $5 " " $6 " " $9 " " $10 " " $11}'
一步步地看输出结果是什么,对整个过程就了然于胸了。
C. 编写一个linux的shell脚本求加注释
#!/bin/bash
#filename:simple-useradd.sh
##(1)只使用一个参数,其他情况在退出后打印一条提示信息
##这个要求有点不明确,这是一个根据提示来执行的脚本,正常应该是不用传递参数的。
if[$#-ne0];
then
echo"Usage:$0"
exit1
fi
##(2)检查/etc/passwd文件,屏幕输出UID的消息
##定义函数DisplayUID
functionDisplayUID(){
cat/etc/passwd
}
##(3)检查/etc/group文件,屏幕输出GID信息
##定义函数DisplayGID
functionDisplayGID(){
cat/etc/passwd
}
##(4)用户从键盘输入信息--新用户的描述、使用shell、UID、GID,并把这些信息分别添加到/etc/passwd、/etc/group、/etc/shadow中,创建用户的主目录/home/***---***为用户名
##定义函数InputNewUser
functionInputNewUser(){
echo"---InputnewuserMenu"
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[$?-ne0];#对添加结果进行判断
then
echo"添加用户出错了"
exit1
fi
}
##(5)设置新用户的密码
##定义SetPassWord
functionSetPassWord(){
localINusername
echo"SetPassWord:"
read-p"username:"INusername
passwd$INusername
}
whiletrue##进入菜单循环
do
cat<<-EOF##打印菜单
1------------DisplayUID
2------------DisplayGID
3------------Inputnewuser
4------------Setpassword
"按Qq退出"
EOF
read-p"choice:???"choice#接收用户输入
case$choicein#根据用户选择来执行相应的函数
1)DisplayUID;;
2)DisplayGID;;
3)InputNewUser;;
4)SetPassWord;;
[Qq])echo"bye";exit0;;
esac
done
这个脚本还有如下问题:
1、”只使用一个参数,其他情况在退出后打印一条提示信息”这个需求不明确,不知道是啥意思,正常情况下,像这种脚本都是不用位置参数的,也可能我不理解题目的意思;
2、脚本还不够严谨,有一些异常没有捕获也没有重定向,不过如果你是交作业的话就问题不大咯。
D. 使用bash脚本,要对一个文件添加注释。文件中有很多keyword,比如“state”,要在每个state后面添加注释
提供一个思路
不知道你的keyword怎么保存的,是要在程序中加可以建立keyword数组并赋值,
如array[keyword]=state,
如果keyword和注释在文件中也可以读取存入如上数组,然后在需要注释的文件中查找关键字,找到关键字,则替换为keyword=keyword+array[keyword]
如果需要详细的,需补充问题
E. 在shell脚本中,哪个符号表示后面的内容是注释
"#"号;
以“#”开头的行就是注释,会被解释器忽略。
F. shell脚本读文件如何忽略空行和注释行
可以通过sed命令,将空行和注释行删除掉。
1、以下面的文档内容为例,#号开头的是注释,然后有很多空行,文档名为1.tt。
G. shell脚本里怎么去掉其中两行注释并保存退出
试试这样: sed '/^$/d' input | awk '{print $0" "}' >output处理input文件。 首先用sed去掉所有空行,然后通过awk在逐行打印时再加上一个空行。 结果保存到output文件中。
H. SHell脚本解释:麻烦哪位把下面的代码仔细注释一下,感谢!
list=`ls -l|grep -v grep|grep -v 0|grep -v export.sh|sort -n|awk {'print $9'}`
| 是管道符,将前面命令的执行结果传递给后面的命令。
学会拆分开来看就不难理解,其实可以一步一步地执行看看结果,比如先执行 ls -l ,再执行ls -l|grep -v grep,再执行ls -l|grep -v grep|grep -v 0,看有什么变化。
这句意思就是,将 ls -l 命令的结果中,去除包含grep、0以及export.sh的行,用sort排序后取出第9列内容(即文件名列表),保存到list变量中。后面的arg即为按顺序从文件名列表中取出的每个文件名。
len=${#arg} #get string len
这一句后面已经有注释了,获取arg字符串长度。
tab=${arg:0:len-4} #get filename not include extend name
这句后面也有注释了,获取文件名中除扩展名外的部分。字面解释,就是获取第0个字符到第(长度-4)个字符之间的字符串(扩展名加.一共4个字符)。
echo "bcp ${tab} in /opt/sybase/sdb/ln_data/${arg} -Uname -Ppwd -Sserver -c -t'||' -r'&&\n' -b10 >>./err.txt 2>&1"
打印 echo 后面的语句。语句中的变量被展开。
我觉得这句有问题,最后的输出重定向 >>./err.txt 2>&1 应该拿到双引号外面来,而且如果仅保存错误信息到err.txt的话,应该写成 2>>./err.txt
I. 如果用vim编辑shell脚本有办法写中文注释吗
当然可以的,只要你装了中文输入法,就可以写中文注释了
这个注释不限定英语的
J. 如何对shell脚本进行批量注释
采用下面这种形式:
:<<COMMENTBLOCK
代码行1
代码行2
代码行3
COMMENTBLOCK
注意:第二个COMMENTBLOCK需要顶格写,前面不能有空格。
当然,这两个COMMENTBLOCK也可以替换成任意在被注释代码行中未出现过的字符串。、
其实是利用了Here Documents,将代码段作为空命令 : 的输入。
关于Here Documents,参见:http://linux.die.net/abs-guide/here-docs.html