shell脚本实训总结(shell 脚本如何进行调试)

本文目录
shell 脚本如何进行调试
Shell提供了一些用于调试脚本的选项,如:
1.-n :读一遍脚本中的命令但不执行,用于检查脚本中的语法错误。
2.-v :一边执行脚本,一边将执行过的脚本命令打印到标准错误输出。
3.-x :提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。该选项有三种常见的使用方法:
1.在命令行提供参数。如:itcast@itcast$ sh -x ./script.sh
2.在脚本开头提供参数。如:#! /bin/sh -x
在脚本中用set命令启用或禁用参数。如:set -x 和 set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试。
学会了吗?我也是在黑马程序员学了C之后会的,现在已经工作了,工资15K,福利待遇挺好的。
如何在shell中处理异常
似乎好像大概有句话是这么说得,好程序与坏程序之间的区别就在于它的鲁棒性,也就是在异常情况下该程序是否还是在可hold住状态,能否不死,不崩溃,或者不做出一些超出预期的事情。那要做好这些,自然而然就要学会如何去处理异常。平时写php或者java程序等等的时候,很多人都会去注重对于异常的处理,比如try..catch等等,但往往在写一些脚本的时候,忽视了对于异常的判断。本文主要就是写如何在shell中去处理异常。因为今天太晚了,所以我就先写第一部分,后面再写第二部分。
返回值
要判断一段代码是否出现了异常,一个最基本的判断就是对他返回值的判断。在shell中,我们往往规定0为正常,一切非0返回值则为不正常。但往往我们在写shell脚本的时候,忽略对于返回值的判断。我们看一个很基本的shell程序
#!/bin/sh
cd /home/xxxx/
rm -rf *
这个脚本的意思很简单,就是cd到某一个目录下,然后将该目录下所有的内容都删除。首先,rm这种东西出现在脚本中,就是一个很危险的操作,而这个程序的关键之处还在于,并没有对第一行shell的返回值进行任何的判断,也就是说对于cd那行代码无论执行失败与否,都会去执行下面的那段rm,试想如果在某些情况下cd那段代码失败了之后,会出现多么可怕的后果。所以,我们应该对于cd的代码做返回值的判断。
#!/bin/sh
cd /home/xxxx/
if ; then
rm -rf *
else
echo "cannot change directory" 1》&2
exit 1
fi
$?这个常量代表的就是上一段shell的返回值。这个我在前面一片文章里也提到过shell中的trap和expr。这样写的话,就要比先前的程序安全多了,如果没有cd到相应目录,则不会去执行删除操作。
当然,程序里这样写是有些负责了,其实你也可以这样写:
if cd /home/xxxx/ ; then
rm -rf *
else
echo "cannot change directory" 1》&2
exit 1
这是if的另一种用法。这样写,就要比刚才的好多了。不过其实这样写,也比较麻烦,其实你还可以这样来写:
cd /home/xxxx/ && rm -rf *
这个&&符大家肯定不陌生,那这样来写,是否就可以保证了程序的安全性了呢?下面就来讲一下&&和||
&&和||
对于一个shell程序, shell1 && shell2 ,如果是用&&符连接的,那只有在shell1返回0(即正常)时,shell2才会执行,否则shell2根本就不执行,所以前面说得最后一种cd&&rm的这种做法是可行的,而且是安全的。那||呢,对于shell1||shell2,只有在shell1执行失败时,shell2才会执行,否则shell2是不执行得。所以,我们可以这样来写:
cd /home/xxxx || error_exit "Cannot change directory"
rm -rf *
这样,在cd /home/xxxx失败时,就会进行error_exit这个函数的分支。那error_exit这个是啥函数呢。。哦,其实,这只是一个自定义的失败处理函数而已。一个比较简单的定义,当然,这也是处理程序异常的一个方式。因为总不能每次异常,都去手动写个echo failed exit等等,所以有个统一的函数处理会比较方便。
function error_exit {
echo "$1" 1》&2
exit 1
}
cd /home/xxxx || error_exit "failed"
rm -rf *
如上,这是一个非常简单的异常处理函数,在异常时,可以去主动调用error_exit,当然,你调用的时候,可以补充上行号信息。比如:
cd /home/xxxx || error_exit "$LINENO: failed"
上面讲得只是一些简单的异常处理的方式,其实还有其他方式,比如我在上篇文章shell中的trap和expr讲到的trap方式,其实也正是因为我上面文章写了trap,所以才想写这篇文章来把处理shell的异常给整理出来,当然也是为大家提个醒,在shell中,也是要处理异常,需要有这样一个意识。今天太晚了,先睡觉了,明早还要早起T.T ,下篇文章,PART 2中,我会详细总结下trap的捕获异常的方式。
转载,仅供参考,祝你愉快,满意请采纳。
SHELL脚本语言在LINUX系统中有什么作用
shell脚本里可以写程序,利用linux系统的各种现成的命令,来重新组合成一个新的程序,这个程序可以实现你要的功能,从而替代大量手工输入的各种命令,很方便
关于Linux的实训报告
Linux
实
训
报
告
班级:网络081
姓名:徐娣娣
学号:5号
实训内容:
1、 文本方式安装RedLinux系统,并设置成默认情况下从文本模式启动,启动时等待5秒钟。
2、 建立目录:
3、 把文件file复制到/tmp/jxgcxy目录下,并重新命名为temp,修改权限为:所有者读、写、执行,同组用读、写,其他人读。删除目录wl。
4、 把/etc/shadow文件中的最后10行复制到test.c文件中。
5、 添加用户test,限定用户test在/home分区下,只能使用最多20MB磁盘空间。
6、 某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:(1)在下午4:50删除/abc目录下的全部目录和全部文件。(2)每周五下午的5:00将/home/test目录下的所有文件归档并压缩为/backup目录中的test-data.tar.gz文件。
7、 实现磁盘配额。添加十个用户:test1~test10,对test1用户进行限制,硬块限制1000,I节点硬限制100,软限制50,并设置限制时间为3天,把test1用户的配额设置复制给其他9个用户。
8、 新建一个用户jxgcxy,指定该用户的主目录为/tmp/jxgcxy,用户编号为550,组编号为580,用到的shell为bash,将用户test1改名成为user1,并修改它的主目录为/home/user1。将test2设为root组,并该帐户的有效期限设为1个月,查看相应文件是否设置成功。
9、 用ps和top命令查看进程,比较两种方法的优缺点,并非别记录显示结果中各部分的含义以及top中多处时间刷新一次,将ftp的优先级设为-5,将用户test的优先级设为-5。
10、 在linux系统上安装VNC服务器,在windows系统上安装VNC客户端软件,通过客户端软件操作linux系统。
11、 设计一个shell程序,在/userdate目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者在组的权限为:读、执行。
短暂的实习生活在忙忙碌碌中度过了,虽然极其短暂但也给予我好多的感触,我也终于明白了学校为何要采取这种实训活动,不只是为了加强知识的补充,也是为了把以前学到的知识总结起来,以及复习以前所学的知识。
编写shell脚本运行python文件
(已尝试mac自带的文本器,脚本器无法编写.sh文件)
运行后出现vim主界面,代表mac有vim,并且成功进入了vim
想要运行.py文件,直接使用绝对路径即可(此路径可以通过直接拖进终端即可获得,或者使用快捷键Option+Command+C 复制文件途径。)
格式: /可执行文件所在目录/可执行文件
到这里简单可以运行regression.py文件的shell脚本写好了。
解决办法:修改rt.sh文件权限,命令为:
解决办法:同问题一
查了资料问题是’(’,’)’要使用转义,才可以识别即’(’,’)’。所以在最开始打开regression.py文件把所有的括号都加了一遍,这种方法不会再出现括号的错误,但是这并不是一个合理的解决办法,这样太麻烦了,而且编写时是不会这样处理的,所以在看了另一个别人的脚本时,发现在.py脚本的头部,即第一行加了一句话
这时使用未做过括号处理的.py文件,也不会报错了!
***隐藏网址***
regression.py在不使用rt.sh文件是可以成功运行的,但是此时出现no module错误。
开始以为是quandl自己安装的问题,在python2.7是Quandl,python3.6是quandl,所以在终端使用pip3,pip分别安装,但是运行时还会出现同样问题,但发现一个问题不管是在使用pip,还是pip3在终端运行时,均会说此包已存在,但存在路径均为python3.6下,所以尝试更改regression.py文件的头部第一行,更改为: #!/usr/bin/env python3
可以正常运行了!!!!
还是开心的晒一下,结果吧。(虽然和脚本无关了,哈哈哈哈哈)
对于使用shell脚本,传递参数,后续进行学习总结,今天就总结好编写shell脚本运行python文件吧!

更多文章:
oracle11g端口映射客户端频繁掉线(oracle本地进行连接的时候报错ORA-12560: TNS: 协议适配器错误)
2026年10月10日 16:10
vb程序设计里面的x是啥(VB程序设计中的变量是如何定义的,请大家帮帮忙告诉我)
2026年10月10日 10:40
java定时器每一分钟执行一次(java定时执行问题: 我想让一个Java代码在每小时的第25分钟执行一次的,这个怎么实现)
2026年10月10日 08:50
abap开发工作经历(目前,从事的是ABAP开发的不知道做这个有没有什么前途啊好的话,我会加分的~)
2026年10月10日 01:10






