grep: invalid range end(用sed命令怎么打印文件中的最后一行)

本文目录
- 用sed命令怎么打印文件中的最后一行
- shell 取下一行
- 如何查看linux并发连接数
- 用secure -CRT无法连接路由器
- 请帮忙注解一下下边的shell命令,其中的 “1>” “2>“ “2>&1“ 具体什么意思,有什么含义
- vm上的suse安装oracle出现问题
- os x shell上 为什么 这段代码跑出来没有n 的”_“ 的显示
用sed命令怎么打印文件中的最后一行
读取文件最后一行的命令:
1、 awk ’NF{a=$0}END{print a}’ file.txt
2、sed ’/^$/!h;$!d;g’ file.txt
grep
1. grep
正则表达式元字符集(基本集)
^ 锚定行的开始
如:’^grep’匹配所有以grep
开头的行。
$ 锚定行的结束
如:’grep$’匹配所有以grep
结尾的行。
. 匹配一个非换行符的字符
如:’gr.p’匹配gr
后接一个任意字符,然后是p。
* 匹配零个或多个先前字符
如:’*grep’匹配所有一个或多个空格后紧跟grep
的行。 .*一起
用代表任意字符。
匹配一个指定范围内的字符,如’rep’匹配Grep和grep。
匹配一个不在指定范围内的字符,如:’rep’匹配不包含A-R和T-Z的一个字母
开头,紧跟rep
的行。
\(..\)
标记匹配字符,如’\(love\)’,love被标记为1。
\《
锚定单词的开始,如:’\
开头的单词的行。
\》
锚定单词的结束,如’grep\》’匹配包含以grep
结尾的单词的行。
x\{m\} 重复字符x,m
次,如:’0\{5\}’匹配包含5个o
的行。
x\{m,\} 重复字符x,至少m
次,如:’o\{5,\}’匹配至少有5个o
的行。
x\{m,n\} 重复字符x
,至少m
次,不多于n
次,如:’o\{5,10\}’匹配5--10个o
的行。
\w
匹配文字和数字字符,也就是
,如:’G\w*p’匹配以G后跟零个或多个文字或数
字字符,然后是p。
\W \w
的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b
单词锁定符,如: ’\bgrepb\’只匹配grep。 第 4 页 共 34 页
2. 用于egrep和 grep -E的元字符扩展集
+
匹配一个或多个先前的字符。如:’+able’
,匹配一个或多个小写字母后跟able
的串,
如loveable,enable,disable
等。
?
匹配零个或多个先前的字符。如:’gr?p’匹配gr
后跟一个或没有字符,然后是p
的行。
a|b|c 匹配a或b或c
。如:grep|sed匹配grep或sed
()
分组符号,如:love(able|rs)ov+匹配loveable或lovers
,匹配一个或多个ov。
x{m},x{m,},x{m,n} 作用同x\{m\},x\{m,\},x\{m,n\}
3. POSIX字符类
为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)
增加了特殊的字符类, 如是A-Za-z0-9
的另一个写法。 要把它们放到号内才能成为
正则表达式,如
。在linux下的grep除fgrep
外,都支持POSIX
的字符类。
文字数字字符
文字字符
数字字符
非空字符(非空格、控制字符)
小写字符
控制字符
非空字符(包括空格)
标点符号
所有空白字符(新行,空格,制表符)
大写字符 第 5 页 共 34 页
十六进制数字(0-9,a-f,A-F)
4. Grep命令选项
-?
同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2
行。
-b,--byte-offset
打印匹配行前面打印该行所在的块号码。
-c,--count
只打印匹配的行数,不显示匹配的内容。
-f File,--file=File
从文件中提取模板。空文件中包含0
个模板,所以什么都不匹配。
-h,--no-filename
当搜索多个文件时,不显示匹配文件名前缀。
-i,--ignore-case
忽略大小写差别。
-q,--quiet
取消显示,只返回退出状态。0
则表示找到了匹配的行。
-l,--files-with-matches
打印匹配模板的文件清单。
-L,--files-without-match
打印不匹配模板的文件清单。
-n,--line-number
在匹配的行前面打印行号。
-s,--silent
不显示关于不存在或者无法读取文件的错误信息。
-v,--revert-match
反检索,只显示不匹配的行。
-w,--word-regexp 如果被\《和\》
引用,就把表达式做为一个单词搜索。
-V,--version
显示软件版本信息。
5. 实例
要用好grep
这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例
讲解,只列几个例子,讲解一个正则表达式的写法。
$ ls -l | grep ’^a’
通过管道过滤ls -l
输出的内容,只显示以a
开头的行。
$ grep ’test’ d* 第 6 页 共 34 页
显示所有以d开头的文件中包含test
的行。
$ grep ’test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep ’\{5\}’ aa
显示所有包含每个字符串至少有5
个连续小写字符的字符串的行。
$ grep ’w\(es\)t.*\1’ aa
如果west
被匹配,则es
就被存储到内存中,并标记为1
,然后搜索任意个字符(.*
),这些字
符后面紧跟着另外一个es(\1
),找到就显示该行。如果用egrep或grep -E
,就不用"\"号进
行转义,直接写成’w(es)t.*\1’
就可以了。
sed
1. 定址功能
可以通过定址来定位你所希望的行,该地址用数字构成,用逗号分隔的两个行数表示以这
两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3
行,美元符号($)表示
shell 取下一行
那用awk吧
# cat test.list
1
2
3
4
5
6
;exit}}’ test.list
4
我直接举例了,不明白HI我。
# cat test.list
1
2
3
4
5
6
# grep -A1 3 test.list
3
4
# grep -A1 3 test.list | grep -v 3
4
如何查看linux并发连接数
1、查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态:
netstat -n | awk ’/^tcp/ {++S}
netstat -n|grep ^tcp|awk ’{print $NF}’|sort -nr|uniq -c
或者:
netstat -n | awk ’/^tcp/ {++state}
返回结果一般如下:
LAST_ACK 5 (正在等待处理的请求数)
SYN_RECV 30
ESTABLISHED 1597 (正常数据传输状态)
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)
其他参数说明:
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
2、查看Nginx运行进程数
ps -ef | grep nginx | wc -l
返回的数字就是nginx的运行进程数,如果是apache则执行
***隐藏网址***
3、查看Web服务器进程连接数:
netstat -antp | grep 80 | grep ESTABLISHED -c
用secure -CRT无法连接路由器
方法/步骤1:打开SecureCRT,点击文件中的”快速连接“2:在打开的窗口中输入要连接的服务器主机名,端口、用户、密码点击链接3:进入Tomcat部署bin目录输入cd/usr/local/netwaymedia/expo_tomcat/bin命令,按回车键确认4:查看Tomcat是否运行输入ps-ef|grepjava命令,按回车键确认(如下图红色框中标注则在运行)5:停止Tomcat运行输入shshutdown.sh命令,按回车键确认6:查询Tomcat是否运行停止(如下图该语句无结果输出表示Tomcat已停止运行)输入ps-ef|grepjava-V|grepjava命令,按回车键确认7:如果Tomcat还有在活动,用命令杀掉进程输入ill-97753命令,按回车键确认
请帮忙注解一下下边的shell命令,其中的 “1>” “2>“ “2>&1“ 具体什么意思,有什么含义
》和》》都是重定向输出 ,1》 指标准信息输出路径(也就是默认的输出方式) ,2》 指错误信息输出路径 ,2》&1 指将标准信息输出路径指定为错误信息输出路径。操作方法如下:
1、首先将输入分割成关键字和运算符,服从引用的规则,这些符号会被分成元操作符,别名也会在这里扩展成元操作符。
2、变量名扩展,执行变量名的扩展,将这些扩展变成文件名,命令和参数的列表。可以参考shell的扩展和文件名的扩展。
3、执行必要的重定向,并将重定向的运算符和他们的对象,从参数列表中移除。
4、在前面的都是解析命令,最后这里就会执行命令了。
5、每个shell命令都可以选择等待他们完成,然后获取他们的返回状态是否正常(成功)。
vm上的suse安装oracle出现问题
方法/步骤
检测所要安装的数据包
linux-udly:~ # rpm -qa | grep binutils
binutils-2.20.0-0.7.9
linux-udly:~ # rpm -qa | grep gcc
gcc-4.3-62.198
gcc43-c++-4.3.4_20091019-0.7.35
linux-udly:~ # rpm -qa | grep glibc
glibc-2.11.1-0.17.4
linux-udly:~ # rpm -qa | grep libaio
libaio-0.3.109-0.1.46
libaio-devel-0.3.109-0.1.46
linux-udly:~ # rpm -qa | grep libgcc
libgcc43-4.3.4_20091019-0.7.35
linux-udly:~ # rpm -qa | grep libstdc
libstdc++-devel-4.3-62.198
libstdc++43-4.3.4_20091019-0.7.35
libstdc++43-32bit-4.3.4_20091019-0.7.35
libstdc++43-devel-4.3.4_20091019-0.7.35
libstdc++43-devel-32bit-4.3.4_20091019-0.7.35
linux-udly:~ # rpm -qa | grep make
make-3.81-128.20
linux-udly:~ # rpm -qa | grep sysstat
sysstat-8.1.5-7.9.56
以上没有的安装包,都需要进行安装
linux-udly:~ # rpm –ivh xxx
创建用户组
linux-udly:~ # groupadd oinstall
linux-udly:~ # groupadd dba
创建oracle用户
linux-udly:~ #mkdir /home/oracle
linux-udly:~ # useradd -g oinstall -G dba -d /home/oracle oracle
linux-udly:~ # passwd oracle
linux-udly:~ # chown -R oracle:oinstall /home/oracle/
创建oracle数据库安装目录
linux-udly:/opt # pwd
/opt
linux-udly:/opt # mkdir -p oracle
linux-udly:/opt # chown -R oracle:oinstall /opt/oracle
1、 验证某些参数是否正确
linux-udly:/opt # cat /etc/nsswitch.conf | grep hosts
hosts: files mdns4_minimal dns
linux-udly:/opt # hostname
linux-udly
linux-udly:/opt # cat /etc/hosts
127.0.0.1 localhost
配置/etc/sysctl.conf文件,加入以下内容,保存之后执行 sysctl -p
linux-udly:/opt # vi /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
配置/etc/security/limits.conf文件,加入以下内容
linux-udly:/opt #vi /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
配置/etc/profile文件,加入以下内容,然后执行 source /etc/profile
linux-udly:/opt #vi /etc/profile
if ; then
if ; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
切换用户:
linux-udly:/opt # su - oracle
oracle@linux-udly:~》 pwd
/home/oracle
oracle@linux-udly:~》
设置环境变量:修改/home/oracle/.bash_profile文件,加入以下内容
export PATH
ORACLE_BASE=/opt/oracle
ORACLE_HOME=$ORACLE_BASE/oracle
ORACLE_SID=dbbha
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
解压数据库文件
oracle@linux-udly:~》 su - root 切换到root用户
??:
linux-udly:~ # unzip linux.x64_11gR2_database_2of2.zip (此文件已上传到此目录,下同)
linux-udly:~ # unzip linux.x64_11gR2_database_1of2.zip
linux-utdu:~ # mv -f database/ /opt/oracle/ (database移至/opt/oracle/)
linux-utdu:~ # cd /opt/oracle/
linux-utdu:/oracle # chown -R oracle:oinstall database/
致此准备工作已完成!
os x shell上 为什么 这段代码跑出来没有n 的”_“ 的显示
进行linux测试编写脚本必少Shell脚本名称随便定义要缀名例写abcsmartzip类名称运行要键入
./smartzip能运行脚本
每行命令处用空格行
第1部. Linux 脚本编写基础
1.1 语基本介绍
1.1.1
程序必须面行始(必须文件第行):
#!/bin/sh
符号#!用告诉系统面参数用执行该文件程序例我使用/bin/sh执行程序
脚本要执行该脚本必须使其执行
要使脚本执行:
编译 chmod +x filename 才能用./filename 运行
1.1.2 注释
进行shell编程#句表示注释直行结束我真诚建议您程序使用注释
您使用注释即使相间内没使用该脚本您能短间内明白该脚本作用及工作原理
1.1.3 变量
其编程语言您必须使用变量shell编程所变量都由字符串组并且您需要变量进行声明要赋值给变量您写:
#!/bin/sh
#变量赋值:
a="hello world"
# 现打印变量a内容:
echo "A is:"
echo $a
候变量名容易与其文字混淆比:
num=2
echo "this is the $numnd"
并打印"this is the 2nd"仅仅打印"this is the "shell搜索变量numnd值变量没值使用花括号告诉shell我要打印num变量:
num=2
echo "this is the ${num}nd"
打印: this is the 2nd
1.1.4 环境变量
由export关键字处理变量叫做环境变量我环境变量进行讨论通情况仅仅登录脚本使用环境变量
1.1.5 Shell命令流程控制
shell脚本使用三类命令:
1)Unix 命令:
虽shell脚本使用任意unix命令由些相更用命令些命令通用进行文件文字操作
用命令语及功能
echo "some text": 文字内容打印屏幕
ls: 文件列表
wc –l file :计算文件行数
wc -w file:计算文件单词数
wc -c file:计算文件字符数
cp sourcefile destfile: 文件拷贝
mv oldname newname : 重命名文件或移文件
rm file: 删除文件
grep ’pattern’ file: 文件内搜索字符串比:grep ’searchstring’ file.txt
cut -b colnum file: 指定欲显示文件内容范围并输标准输设备比:输每行第5第9字符cut -b5-9 file.txt千万要cat命令混淆
两完全同命令
cat file.txt: 输文件内容标准输设备(屏幕)
file somefile: 文件类型
read var: 提示用户输入并输入赋值给变量
sort file.txt: file.txt文件行进行排序
uniq: 删除文本文件现行列比: sort file.txt | uniq
expr: 进行数运算Example: add 2 and 3expr 2 "+" 3
find: 搜索文件比:根据文件名搜索find . -name filename -print
tee: 数据输标准输设备(屏幕) 文件比:somecommand | tee outfile
basename file: 返包含路径文件名比: basename /bin/tux返 tux
dirname file: 返文件所路径比:dirname /bin/tux返 /bin
head file: 打印文本文件几行
tail file : 打印文本文件末尾几行
sed: Sed基本查找替换程序标准输入(比命令管道)读入文本并
结输标准输(屏幕)该命令采用则表达式(见参考)进行搜索要shell通配符相混淆比:linuxfocus 替换LinuxFocus :cat text.file | sed ’s/linuxfocus/LinuxFocus/’ 》 newtext.file awk: awk 用文本文件提取字段缺省字段割符空格使用-F指定其割符
cat file.txt | awk -F, ’{print $1 "," $3 }’我使用作字段割符同打印第第三字段该文件内容: Adam Bor, 34, IndiaKerry Miller, 22, USA命令输结:Adam Bor, IndiaKerry Miller, USA
2) 概念: 管道, 重定向backtick
些系统命令真重要
管道 (|) 命令输作另外命令输入
grep "hello" file.txt | wc -l
file.txt搜索包含hello行并计算其行数
grep命令输作wc命令输入您使用命令
重定向:命令结输文件标准输(屏幕)
》 写入文件并覆盖旧文件
》》 加文件尾部保留旧文件内容
反短斜线
使用反短斜线命令输作另外命令命令行参数
命令:
find . -mtime -1 -type f -print
用查找24(-mtime –2则表示48)内修改文件您想所查找文件打包则使用脚本:
#!/bin/sh
# The ticks are backticks (`) not normal quotes (’):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
3)流程控制
1.if
"if" 表达式 条件真则执行then面部:
if ....; then
....
elif ....; then
....
else
....
fi
数情况使用测试命令条件进行测试比比较字符串、判断文件否存及否读等等…
通用" "表示条件测试注意空格重要要确保括号空格
:判断否文件
:判断/bin/ls否存并执行权限
:判断$var变量否值
:判断$a$b否相等
执行man test查看所测试表达式比较判断类型
直接执行脚本:
#!/bin/sh
if ; then
echo "your login shell is the bash (bourne again shell)"
else
echo "your login shell is not bash but $SHELL"
fi
变量$SHELL包含登录shell名称我/bin/bash进行比较
快捷操作符
熟悉C语言朋友能喜欢面表达式:
&& echo "This computer uses shadow passwors"
&& 快捷操作符左边表达式真则执行右边语句
您认逻辑运算与操作例表示/etc/shadow文件存则打印 This computer uses shadow passwors同或操作(||)shell编程用例:
#!/bin/sh
mailfolder=/var/spool/mail/james
’ ’{ echo "Can not read $mailfolder" ; exit 1; }
echo "$mailfolder has mail from:"
grep "^From " $mailfolder
该脚本首先判断mailfolder否读读则打印该文件"From" 行读则或操作效打印错误信息脚本退问题我必须两命令:
-打印错误信息
-退程序
我使用花括号匿名函数形式两命令放起作命令使用般函数文提及
用与或操作符我用if表达式作任何事情使用与或操作符更便利
2.case
case :表达式用匹配给定字符串数字
case ... in
...) do something here ;;
esac
让我看例 file命令辨别给定文件文件类型比:
file lf.gz
返:
lf.gz: gzip compressed data, deflated, original filename,
last modified: Mon Aug 27 23:09:18 2001, os: Unix
我利用点写叫做smartzip脚本该脚本自解压bzip2, gzip zip 类型压缩文件:
#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) echo "File $1 can not be uncompressed with smartzip";;
esac
您能注意我使用特殊变量$1该变量包含传递给该程序第参数值
说我运行:
smartzip articles.zip
$1 字符串 articles.zip
3. selsect
select 表达式种bash扩展应用尤其擅于交互式使用用户组同值进行选择
select var in ... ; do
break
done
.... now $var can be used ....
面例:
#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
面该脚本运行结:
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
4.loop
loop表达式:
while ...; do
....
done
while-loop 运行直表达式测试真will run while the expression that we test for is true.
关键字"break" 用跳循环关键字continue用执行余部直接跳循环
for-loop表达式查看字符串列表 (字符串用空格隔) 其赋给变量:
for var in ....; do
....
done
面例别打印ABC屏幕:
#!/bin/sh
for var in A B C ; do
echo "var is $var"
done
面更用脚本showrpm其功能打印些RPM包统计信息:
#!/bin/sh
# list a content summary of a number of RPM packages
# USAGE: showrpm rpmfile1 rpmfile2 ...
# EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
for rpmpackage in $*; do
if ;then
echo "=============== $rpmpackage =============="
rpm -qi -p $rpmpackage
else
echo "ERROR: cannot read file $rpmpackage"
fi
done
现第二特殊变量$*该变量包含所输入命令行参数值
您运行showrpm openssh.rpm w3m.rpm webgrep.rpm
$* 包含 3 字符串即openssh.rpm, w3m.rpm and webgrep.rpm.
5. 引号
向程序传递任何参数前程序扩展通配符变量所谓扩展意思程序通配符(比*)替换合适文件名变量替换变量值防止程序作种替换您使用引号:让我看例假设前目录些文件两jpg文件 mail.jpg tux.jpg
1.2 编译SHELL脚本
#ch#!/bin/sh mod +x filename
cho *.jpg ∪缓螅梢酝ü淙耄?./filename 执行您脚本
打印"mail.jpg tux.jpg"结
引号 (单引号双引号) 防止种通配符扩展:
#!/bin/sh
echo "*.jpg"
echo ’*.jpg’
打印"*.jpg" 两
单引号更严格些防止任何变量扩展双引号防止通配符扩展允许变量扩展
#!/bin/sh
echo $SHELL
echo "$SHELL"
echo ’$SHELL’
运行结:
/bin/bash
/bin/bash
$SHELL
种防止种扩展使用转义字符——反斜杆:
echo /*.jpg
echo /$SHELL
输:
*.jpg
$SHELL
6. Here documents
要几行文字传递给命令here documents(译者注:目前没见该词适合翻译)种错每脚本写段帮助性文字用我四 here documents必用echo函数行行输 "Here document"
here document 段特殊目代码块. 使用I/O 重定向形式命令序列传递交互程序或者命令, 比ftp, cat, 或者ex文本器.
1 COMMAND
limit string 用划定命令序列范围(译者注: 两相同limit string间命令序列). 特殊符号
here document 形式看:
1 #!/bin/bash
2 interactive-program
选择名字非诡异limit string避免命令列表limit string重名问题.
面例该例我文件进行重命名并且使用here documents打印帮助:
#!/bin/sh
# we have less than 3 arguments. Print the help text:
if ; then
cat
4)函数
您写些稍微复杂些程序您发现程序能几使用相同代码并且您发现我使用函数便函数:
functionname()
{
# inside the body $1 is the first argument given to the function
# $2 the second ...
body
}
您需要每程序始函数进行声明
面叫做xtitlebar脚本使用脚本您改变终端窗口名称
使用叫做help函数您看定义函数使用两
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
cat shift by 2
--) shift;break;; # end of options
-*) echo "error: no such option $1. -h for help";exit 1;;
*) break;;
esac
done
echo "opt_f is $opt_f"
echo "opt_l is $opt_l"
echo "first arg is $1"
echo "2nd arg is $2"
您运行该脚本:
cmdparser -l hello -f -- -somefile1 somefile2
返结:
opt_f is 1
opt_l is hello
first arg is -somefile1
2nd arg is somefile2
脚本何工作呢脚本首先所输入命令行参数进行循环输入参数与case表达式进行比较匹配则设置变量并且移除该参数根据unix系统惯例首先输入应该包含减号参数.
第2部 实例
现我讨论编写脚本般步骤任何优秀脚本都应该具帮助输入参数并且写伪脚本(framework.sh)该脚本包含数脚本都需要框架结构非错主意候写新脚本我需要执行copy命令:
cp framework.sh myscript
再插入自函数
让我再看两例:
(1) 二进制十进制转换
脚本 b2d 二进制数 (比 1101) 转换相应十进制数用expr命令进行数运算例:
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
cat
第3部:调试
简单调试命令使用echo命令您使用echo任何怀疑错打印任何变量值绝数shell程序员要花费80%间调试程序原Shell程序处于需要重新编译插入echo命令需要少间
shell真实调试模式脚本"strangescript" 错误您进行调试:
sh -x strangescript
执行该脚本并显示所变量值
shell需要执行脚本检查语模式使用:
sh -n your_script
返所语错误
调试shell程序程
用户刚编写完Shell程序避免错误我利用Bsh提供跟踪选项该选项显示刚刚执行命令及参数用户通set命令打-x选项或启Shell使用-x选项Shell设置跟踪模式例面代码ice_tx:
if
then
echo "usage:sumints integer list"
exit 1
fi
sum=0
until
do
sum=’expr $sum + $1’
shift
done
echo $sum
我用跟踪模式运行:
$sh -x ice_tx 2 3 4
结显示:
+
+sum=0
+
+expr 0+2
+sum=2
+shift
+
+expr 2+3
+sum=5
+shift
+
+expr 5+4
+sum=9
+
+echo 9
9
面看跟踪模式Shell显示执行每条命令及该命令使用变量替换参数值些控制字if、then、until等没显示

更多文章:
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50
perl数组中最多的元素(用perl实现,得到一个数组中重复次数最多的元素)
2026年10月10日 17:00



