Shell编程学习笔记(1)

原创 2004年11月03日 08:08:00
Shell编程学习笔记(1)

作者: Badcoffee

Email: blog.oliver@gmail.com
2004年11月

原文出处: http://blog.csdn.net/yayong
版权所有: 转载时请务必以超链接形式标明文章原始出处、作者信息及本声明

虽然在UNIX/LIUNX平台上做了将近5年的软件工程师。
但是还是得很惭愧的说,我不熟悉shell, 只是粗略了解个大概而已。
以前,工作中遇到问题,要么去忍受,要么就绕道儿走,用C语言来解决问题
可是现在,则是不得不学习shell编程了。
经验告诉我们,最好的学习方法是边干边学。
所以,我就在没有系统学习shell语法的情况下,就开始写shell程序了。

学习一种语言去解决实际问题,还是相当容易的。
写shell的过程中,触及到的某些知识点,再回头看书了解一下,往往事半功倍。

调试
调试的技巧是很重要的。开始写一种语言程序之前,最先了解的就应该是调试技巧:

shell中几个常用的调试参数是:

    -e:如果一个命令失败就立即退出

    -n:读入命令但是不执行它们

    -u:置换时把未设置的变量看作出错

    -v:当读入shell输入行时把它们显示出来

    -x:执行命令时把命令和它们的参数显示出来


上面的所有参数都可以有3种方式来使用,下面将以ksh为例:

1. 命令行方式
使用命令行调用shell的方法省却了修改shell源程序的步骤:
# ksh -xv <文件名>
如果调试跟踪的输出有点冗长,为方便察看,可以利用重定向把Debug信息定向到文件里:
# ksh -xv <文件名>  2>debug.log

2. set 语句
可以在shell程序内部用“set -参数”语句打开相关参数,而“set +参数”则将禁止该参数起作用。
如果只想对程序的某一部分使用调式参数调试时,则可以将该部分用上面两个语句包围起来。

set -xv
.......
想调试的语句...
.......
set +xv

3. 解释器参数

可以在源文件的头部的解释器声明处设置相关的调试参数:
#!/bin/ksh -xv

调试参数用法举例:

1.未置变量退出和立即退出

  未置变量退出特性允许用户对所有变量进行检查,如果引用了一个未赋值的变量就终止shell程序的执行。shell通常允许未置变量的使用,在这种情况下,变量的值为空。如果设置了未置变量退出选择项,则一旦使用了未置变量就显示错误信息,并终止程序的运行。未置变量退出选择项为“-u”。

  当shell运行时,若遇到不存在或不可执行的命令、重定向失败或命令非正常结束等情况时,如果未经重新定向,该出错信息会打印在终端屏幕上,而shell程序仍将继续执行。要想在错误发生时迫使shell程序立即结束,可以使用“-e”选项将shell程序的执行立即终止。

2.shell程序的跟踪

  调试shell程序的主要方法是利用shell命令解释程序的“-v”或“-x”选项来跟踪程序的执行。“-v”选择项使shell在执行程序的过程中,把它读入的每一个命令行都显示出来,而“-x”选择项使shell在执行程序的过程中把它执行的每一个命令在行首用一个“+”加上命令名显示出来。并把每一个变量和该变量所取的值也显示出来,因此,它们的主要区别在于:在执行命令行之前无“-v”则打印出命令行的原始内容,而有“-v”则打印出经过替换后的命令行的内容。

  除了使用shell的“-v”和“-x”选择项以外,还可以在shell程序内部采取一些辅助调试的措施。例如,可以在shell程序的一些关键地方使用echo命令把必要的信息显示出来,它的作用相当于C语言中的printf语句,这样就可以知道程序运行到什么地方及程序目前的状态。


学习完调试技巧后,就可以自如的调试自己写的源程序了;当然,学会调试,更重要的就是可以利用它来学习理解别人写的源代码了。
如果看不懂别人写的代码,打开调试功能是也许是最好的选择。
版权声明:原创文章,转发请包含作者原始文章链接:http://oliveryang.net

《Linux Shell编程 从初学到精通》 学习笔记

第一章 shell脚本编程概述 1.linux的流行是因为它的高可定制性。由于内核仅有几兆的代码量,我们可以根据需要抽离很多用不到的模块。比如设计一个简陋的计算器,就完全不需要网络模块。 2.L...
  • qq_28926493
  • qq_28926493
  • 2016年05月25日 21:58
  • 3202

大夏shell编程学习笔记(1)

shell编程学习笔记
  • liudi439316248
  • liudi439316248
  • 2015年03月31日 11:33
  • 183

bash shell编程学习笔记 [1]

顺序执行多条命令(复合命令)使用分号(;)分隔。 cp,rm,mv 加 -i 进行操作提示,比如cp默认会一直覆盖已存在的,-i 会提示是否覆盖。 cd 不加参数,直接回到主目录。 mkdi...
  • gaocher
  • gaocher
  • 2013年01月06日 15:09
  • 167

shell编程学习笔记(1)

接触到linux已经有2-3年了,一些基本的命令
  • lkiller_hust
  • lkiller_hust
  • 2014年08月01日 08:55
  • 415

Linux Shell脚本编程--变量$#,$@,$*,$?,$0,$1,$2的含义解释

linux中shell变量$#,$@,$0,$1,$2的含义解释:  变量说明:  $$  Shell本身的PID(ProcessID)  $!  Shell最后运行的后台Process的P...
  • liu1pan2min3
  • liu1pan2min3
  • 2016年04月22日 15:19
  • 218

实验9:shell及shell编程

实验9:shell及shell编程 1、实验目的 1)sed的使用; 2)awk的应用; 3)shell及shell编程; 4) 与用户启动相关的文件及使用。 2、实现设备 一台装有Windows操作...
  • gz153016
  • gz153016
  • 2016年04月08日 15:07
  • 1240

OpenCV学习笔记大集锦

转载自: OpenCV学习笔记大集锦 – 视觉机器人 http://www.cvrobot.net/collect-opencv-resource-learn-study-note-chinese...
  • qq_26898461
  • qq_26898461
  • 2016年01月06日 09:49
  • 1430

shell编程Linux中批量创建用户

if [ -f "accountfile" ];then mv $accountfile "$accountfile"`date +%Y%m%d` fi touch "$accountfile" ...
  • oliver233
  • oliver233
  • 2015年12月09日 22:26
  • 647

myBatis学习笔记(1)——快速入门

在项目中使用myBatis 导入jar包 在src下创建配置文件
  • u010837612
  • u010837612
  • 2015年05月12日 11:06
  • 944

Shell编程常用代码实例教程

原文地址:http://erex.sinaapp.com/category/shell/ 本文是在Fedora 13的环境下进行编写测试的,使用的是默认的shell,名字是GNU b...
  • aizj199
  • aizj199
  • 2015年07月07日 17:26
  • 386
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Shell编程学习笔记(1)
举报原因:
原因补充:

(最多只允许输入30个字)