shell脚本注释,shell脚本读文件如何忽略空行和注释行
shell脚本注释,shell脚本读文件如何忽略空行和注释行详细介绍
本文目录一览: shell怎么注释一块代码
方法一
: '被注释的多行内容
'
方法二
:<
<eof
被注释的多行内容
eof
方法三
:<
<!--被注释的多行内容 !
方法四
if false ; then
被注释的多行内容
fi
不能如下使用:
if false ; then
#被注释的多行内容 不能加# fi
</eof
在shell脚本中,哪个符号表示后面的内容是注释
"#"号;
以“#”开头的行就是注释,会被解释器忽略。
如何对shell脚本进行批量注释
采用下面这种形式:
: <
<commentblock代码行1代码行2代码行3commentblock注意:第二个commentblock需要顶格写,前面不能有空格。
当然,这两个COMMENTBLOCK也可以替换成任意在被注释代码行中未出现过的字符串。、
其实是利用了Here Documents,将代码段作为空命令 : 的输入。
关于Here Documents,参见:http://linux.die.net/abs-guide/here-docs.html
</commentblock代码行1代码行2代码行3commentblock注意:第二个commentblock需要顶格写,前面不能有空格。
编写一个Linux的shell脚本求加注释
#!/bin/bash#filename:simple-useradd.sh##(1)只使用一个参数,其他情况在退出后打印一条提示信息## 这个要求有点不明确,这是一个根据提示来执行的脚本,正常应该是不用传递参数的。if [ $# -ne 0 ];then echo "Usage: $0" exit 1fi##(2)检查/etc/passwd文件,屏幕输出UID的消息##定义函数DisplayUIDfunction DisplayUID(){ cat /etc/passwd}##(3)检查/etc/group文件,屏幕输出GID信息##定义函数DisplayGIDfunction DisplayGID(){ cat /etc/passwd}##(4)用户从键盘输入信息--新用户的描述、使用shell、UID、GID, 并把这些信息分别添加到/etc/passwd、/etc/group、/etc/shadow中, 创建用户的主目录/home/***---***为用户名##定义函数InputNewUserfunction 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)设置新用户的密码##定义SetPassWordfunction 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;; esacdone这个脚本还有如下问题:
1、”只使用一个参数,其他情况在退出后打印一条提示信息”这个需求不明确,不知道是啥意思,正常情况下,像这种脚本都是不用位置参数的,也可能我不理解题目的意思;
2、脚本还不够严谨,有一些异常没有捕获也没有重定向,不过如果你是交作业的话就问题不大咯。
如何写一个shell脚本,将一个makefile里,没有注释的行注释掉啊。
用shell的文本过滤功能就行了,就是一些正规表达式.
假如注释是#,那么就找到那些开头没有#号的,然后在前面加上#号就ok了.
无非就是grep/sed/awk等,自己下去查用法吧...
试试下面这句话,我没测试,大致意思就这样吧,把makefile中所有没注释的都注视掉。
sed -r -i '/^ *[^#]/ s/.*/#&/' makefile
shell脚本读文件如何忽略空行和注释行
可以通过sed命令,将空行和注释行删除掉。
1、以下面的文档内容为例,#号开头的是注释,然后有很多空行,文档名为1.tt。
2、执行如下命令
sed
'/^#.*\|^$/d'
1.tt
说明:^#.*说明以#字符开头的行,^$表示手空行,中间的\|是转义,表示或。d表示删除。
shell指令码中的$,$@和$#是什么意思?
shell指令码中的$*,$@和$#是什么意思? 我没用过$@,但是可以自己写个指令码测试下。 先介绍下我知道的,如下: 位置变数 :$0,$1,$2,$3,$4,$5,$6,$7,$8,$9 $0显示执行的指令码,$1...显示位置引数的值 预定义变数: $# 表示位置引数的数量 $* 表示所有位置引数的内容 $? 表示命令执行后返回的状态 (执行成功 返回0 执行不成功 返回非0) $$ 表示当前程序的程序号 希望开启一个程序后不再开启另一个(/proc/
) $! 表示后台执行的最后一个程序号 $0 表示当前的程序名 测试指令码如下:(位置变数只输出到$3) [root@XP-24-35 script]#vim a.sh #!/bin/bash echo '$0 ==> ' $0 echo '$1 ==> ' $1 echo '$2 ==> ' $2 echo '$3 ==> ' $3 echo '$$ ==> ' $$ echo '$* ==> ' $* echo '$@ ==> ' $@ echo '$# ==> ' $# echo '$? ==> ' $? 执行结果1(输入小于三个位置引数a,b) [root@XP-24-35 script]# ./a.sh a b $0 ==> ./a.sh $1 ==> a $2 ==> b $3 ==> $$ ==> 4847 $* ==> a b $@ ==> a b $# ==> 2 $? ==> 0 执行结果2(刚好输入三个位置引数) [root@XP-24-35 script]# ./a.sh a b c $0 ==> ./a.sh $1 ==> a $2 ==> b $3 ==> c $$ ==> 4844 $* ==> a b c $@ ==> a b c $# ==> 3 $? ==> 0 执行结果3(输入大于3个位置引数) [root@XP-24-35 script]# ./a.sh a b c d e f $0 ==> ./a.sh $1 ==> a $2 ==> b $3 ==> c $$ ==> 4852 $* ==> a b c d e f $@ ==> a b c d e f $# ==> 6 $? ==> 0 实验结果说明一切,忘采纳,谢谢。
shell指令码中的$是什么意思 $ 钱号(dollar sign) 变数替换(Variable Substitution)的代表符号。 vrs=123 echo $vrs 123
shell指令码中的“$<”是什么意思? 暂时没有发现shell中这样的环境变数 shell的系统环境变数包括以下 $n $1 表示第一个引数,$2 表示第二个引数 ... $# 命令列引数的个数 $0 当前程式的名称 $? 前一个命令或函式的返回码 $* 以"引数1 引数2 ... " 形式储存所有引数 $@ 以"引数1" "引数2" ... 形式储存所有引数 $$ 本程式的(程序ID号)PID $! 上一个命令的PID
shell指令码中#是什么意思 #在shell指令码中是注释的意思,用于说明程式码的作用。 比如 # 输出内容 echo "输出内容"
作业系统与外部最主要的介面就叫做shell。shell是作业系统最外面的一层。shell管理你与作业系统之间的互动:等待你输入,向作业系统解 释你的输入,并且处理各种各样的作业系统的输出结果。 shell提供了你与作业系统之间通讯的方式。这种通讯可以以互动方式(从键盘输 入,并且可以立即得到响应),或者以shell script(非互动)方式执行。shell script是放在档案中的一串shell和作业系统命令,它们可以被 重复使用。本质上,shell script是命令列命令简单的组合到一个档案里面。 Shell基本上是一个命令直译器,类似于DOS下的mand. 。它接收使用者命令(如ls等),然后呼叫相应的应用程式。较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。 互动式shell和非互动式shell 互动式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作互动式是因为shell与使用者进行交 互。这种模式也是大多数使用者非常熟悉的:登入、执行一些命令、签退。当你签退后,shell也终止了。 shell也可以执行在另外一种模式:非 互动式模式。在这种模式下,shell不与你进行互动,而是读取存放在档案中的命令,并且执行它们。当它读到档案的结尾,shell也就终止了。 shell的型别在UNIX中主要有两大类shell Bourne shell (包括 sh, ksh, and bash) Bourne shell ( sh) Korn shell ( ksh) Bourne Again shell ( bash) POSIX shell ( sh) C shell (包括 csh and tcsh) C shell ( csh) TENEX/TOPS C shell ( tcsh). 附:LINUX系统的shell原理 Linux系统的shell作为作业系统的外壳,为使用者提供使用作业系统的介面。它是命令语言、命令解释程式及程式设计语言的统称。 shell是使用者和Linux核心之间的介面程式,如果把Linux核心想象成一个球体的中心,shell就是围绕核心的外层。当从shell或其他程式向 Linux传递命令时,核心会做出相应的反应。 shell是一个命令语言直译器,它拥有自己内建的shell命令集,shell也能被系统中其他应用 程式所呼叫。使用者在提示符下输入的命令都由shell先解释然后传给Linux核心。
linux shell指令码中 $? 和 $@是什么意思??? $@ :以("$1""$2"...)的形式储存所有输入的命令列引数; $? :上一条命令的返回结果.
请教shell指令码中的&是什么意思 & 后台工作 单一个& 符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作。 tar cvfz data.tar.gz data > /dev/null &
shell指令码中lcd是什么意思 你shell指令码中的 lcd 命令,应该是ftp的内建命令。代表 change local directory——切换本地目录 用法: lcd /path/to/your/directory 注:/path/to/your/directory是你的一个本地目录 ftp 还有一个内建命令 cd 当你登入ftp伺服器后,就可以用cd命令,切换远端目录
shell指令码中 crontab - 是什么意思? -表示标准输入 如果不加这个-,意思是一样的 查询当前crontab档案,去掉其中包括/root/monit/monit_reset.sh的行
shell脚本里怎么去掉其中两行注释并保存退出
试试这样: sed '/^$/d' input | awk '{print $0"\n"}' >output处理input文件。 首先用sed去掉所有空行,然后通过awk在逐行打印时再加上一个空行。 结果保存到output文件中。
shell脚本书写方法
在shell学习过程中,感觉挺有用的一份比较,略整理分享给大家。
首先,shell的作用
用户的登陆shell 登陆后默认的shell程序是: /bin/bash
不同的shell内部指令,运行环境会有所区别
常见的shell有
/bin/sh
/bin/bash
/sbin/nologin
1.编写脚本代码:
使用vi编辑器,每行一条Linux命令,按照顺序执行
2.然后赋予脚本文件可执行的属性
3.执行脚本文件的三种方法
./chao.sh
sh /chao.sh
source /chao.sh
更完善的脚本构成
注释信息
可执行语句
重定向操作
类型 操作符 用途
重定向输入 < 从指定文件读取而不是从键盘输入
重定向输出 > 将输出文件保存到指定文件(覆盖原有内容)
>> 将输出文件保存到指定文件(覆盖原有内容)
标准错误输出 2> 将错误信息保存到指定的文件(覆盖原有内容)
2>> 将错误信息保存到指定的文件
混合输出 &> 将标准输出,标准错误的内容保存到同一文件中
管道操作符号“|”
将左侧的命令输出结果,作为右侧命令的处理对象
shell变量的作用
为灵活管理Linux系统提供的特定参数,有两层意思
变量名:使用固定的名称,由系统预设或用户定义
变量值: 能够根据用户设置,系统环境的变化而变化
变量的类型
自定义变量:由用户自己定义,修改和使用
环境变量: 由系统维护,用于设置工作环境
位置变量: 通过命令行给脚本程序传递参数
预定义变量:BASH中内置的一类变量,不能直接修改
定义一个新的变量
格式: 变量名=变量值
变量名以字母或下划线开头,区分大小写,建议全大写
查看变量的值: echo $变量名
赋值时使用引号:
双引号:允许使用$符引用其他变量值
单引号: 禁止引用其他变量值,$视为普通字符
反撇号:命令替换,提取命令执行后的输出结果
将键盘输入内容为变量赋值
格式: read [-p "提示信息"] 变量名
设置变量的作用范围
export 变量名
export 变量名=变量值
两种格式可以混合使用
整数变量的运算:
expr 变量1 运算符 变量2 [运算符 变量3]
常见的运算符
加法运算符 +
减法运算符: -
乘法运算符:\*
除法运算符: /
取余运算:%
整数变量的运算(2)
((变量=变量运算符变量));
等号后面的变量可以是具体数值
例子:
((a=a+3));
环境变量:
由系统提前创建,用来设置用户的工作环境
配置文件: /etc/profile ~/.bash_profile
常见环境变量的举例
位置变量:
表示为$n, n为1~9之间的数字
预定义变量:
/etc/passwd /etc/shadow
例如一些服务的内置用户名或密码
如apache的启动用户就是预定义变量
条件测试操作
测试特定的 表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值
格式 : test 条件表达式
应用实例:
test -z 进行测试的时候 字符串长度为0的时候 结果才返回1
如果变量数值为0 返回0
条件测试操作
[ 操作符 文件或目录]
[5] 部分是判断表达式,-d表示判断是否是目录
&&是”逻辑与“操作符,只有&&前面的判断成立,后面的语句才会执行
-b的意思是判断 后面的路径是否是一个目录
echo $? 表示对刚刚执行的表达式进行判断
0表示成立,1表示不成立
-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename可执行,则为真 [ -L /usr/bin/grep ]
filename1-nt filename2 如果 filename1比 filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2 如果 filename1比 filename2旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string长度非零,则为真 [ -n "$myvar" ]
string1= string2 如果 string1与 string2相同,则为真 [ "$myvar" = "one two three" ]
string1!= string2 如果 string1与 string2不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符
num1-eq num2 等于 [ 3 -eq $mynum ]
num1-ne num2 不等于 [ 3 -ne $mynum ]
num1-lt num2 小于 [ 3 -lt $mynum ]
num1-le num2 小于或等于 [ 3 -le $mynum ]
num1-gt num2 大于 [ 3 -gt $mynum ]
num1-ge num2 大于或等于 [ 3 -ge $mynum ]
整数值比较
格式: [ 整数1 操作符 整数2 ]
字符串比较
格式1: [ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2: [ -z 字符串 ]
逻辑测试:
格式1: [ 表达式1 ] 操作符 [ 表达式2 ]
格式2: 命令1 操作符 命令2
if语句的结构
while语句的语法结构
这是一个linux下的一个简单shell脚本 是判断一个字符是不是数字的 我看不懂 需要有人给我注释一下 谢谢
#!/bin/bash #开头的标志, 标示是bash的脚本
echo "Please input a number" #屏幕显示 "Please input a number"
read num # 等键盘输入内容, 存在num里
expr $num "+" 10 &> /dev/null # 调用expr 命令, 使num + 10 为expr命令参数, 不显示expr的输出(输出重定向到/dev/null)
if [ $? -eq 0 ];then # 如果expr命令执行成功, $?的值会为0 , 则判断成立
echo "$num is a num" # 输出 是一个数字
else
echo "$num not a num" # 否则输出 不是数字
fi