shell详解九

1.调试脚本程序
脚本程序的调试通常都很容易,但并没有特定的辅助工具。当出现错误时,shell一般都会打印出包含错误的行的行号。如果这个错误并不是非常明显,我们可以添加一些额外的echo语句来显示变量的内容。
因为脚本程序是解释执行的,所以在脚本程序的修改和重试过程中没有编译方面的额外开支。

命令行选项 set选项 说明
sh -n <script> set -o noexec set -n 只检查语法错误,不执行命令

sh -v <script> set -o verbose set -v 在执行命令之前回显它们

sh -x <script> set -o xtrace set -x 在处理完命令行之后回显它们

set -o nounset set -u 如果使用了未定义的变量,就给出出错消息



2.here文档

在shell脚本程序中向一条命令传递输入的一种特殊方法是使用here文档。它允许一条命令在执行时就好像在读取一个文件或键盘一样,而实际上是从脚本程序中得到输入数据。

实验:使用here文档
最简单的例子就是给cat命令提供输入数据,如下所示:

#!/bin/sh

cat << !FUNKY!
hello
this is a here
document
!FUNKY!

它的输出如下所示:
hello
this is a here
docum
ent

here文档看起来是相当奇怪的功能,但在实际工作中它的作用是很大的,因为它允许我们调用交互式的程序,比如一个编译器,并向它提供一些实现定义好的输入。

here文档另一个用法。
我们从名为a_text_file的文件开始,它的内容如下所示:
That is line 1
That is line 2
That is line 3
That is line 4

我们可以通过结合使用here文档和ed编辑器来编辑这个文件,
#!/bin/sh
ed a_text_file << !FunkyStuff!
3
d
. , \$s/is/was
w
q
!FunkyStuff!
exit 0

这个脚本程序简单地调用ed编辑器并向它传递命令,先让它移动到第三行,然后删除改行,再把当前行中的is替换为was。完成这些操作的ed命令来自脚本程序中的here文档。



迈向图形化:dialog工具
这并不是shell的一部分,但通常下它仅仅在shell程序设计中有用。
dialog工具的整体思想非常简单:一个带有各种各样参数和选型的单个程序,它允许你显示不同类型的图形框,范围涵盖从最简单的Yes/No框到输入框,甚至菜单选型。

类型 用于创建类型的选项 含义
复选框 --checklist 允许你显示一个选项列表,每个选项都可以被单独的选择。

信息框 --infobox 在显示消息后,对话框将立刻返回,但并不清除屏幕。

输入框 --inputbox 允许用户输入文本

菜单框 --menu 允许用户选择列表中的一项

消息框 --msgbox 向用户显示一条消息,同时显示一个OK按钮,用户可以通过选择该按钮继续操作

单选框 --radiolist 允许用户选择列表中的一个选项

文本框 --textbox 允许在带有滚动条的文本框中显示文件的内容

是/否框 --yesno 允许你提问,用户可以选择yes或no



对话框类型 参数
--checklist text height width list-height [tag text status] ...

--infobox text height width

--inputbox text height width [initial string]

--menu text height width menu-height [tag item] ...

--msgbox text height width

--radiolist text height width list-height [tag text status] .....

--textbox filename height width

--yesno text height width


dialog  --title  "Check me"  --checklist  "Pick Numbers"  15  25  3  1  "one"  "off"  2  "two"  "on"  3 "three"  "off"

   我们用参数--checklist来创建一个复选框,选项--title将标题设置为Check me,下一个参数是提示信息Pick Numbers.
    接下来设置对话框的大小,它高15行,宽25个字符,同时有3行被用做菜单。

    选项的设置看上去需要有一些技巧,但是必须知道的是每个菜单选项有三个值:
    编号
    文本
    状态
 因此第一项的编号是1,显示的文本是“one”并且状态设置为“off”,然后设置下一个菜单项,它的值分别是2,“two”和选中,


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Shell三剑客"指的是在Linux/Unix系统下使用最广泛的三个命令行工具:grep、sed和awk。它们都是文本处理工具,可以用于快速搜索、替换和处理大量文本数据。 1. grep:用于在文件中搜索指定的文本模式,并将匹配的行打印出来。常用的选项包括: - -i:忽略大小写。 - -r:递归地搜索目录中的所有文件。 - -v:输出未匹配的行。 - -w:只匹配整个单词,而不是部分匹配。 示例:搜索包含特定单词的行,例如:`grep "hello" file.txt` 2. sed:用于在文件中进行文本替换和编辑操作。它可以通过正则表达式来查找和替换文本,并且可以将修改后的内容输出到屏幕或保存到文件中。常用的选项包括: - -i:直接修改文件,而不是输出到屏幕。 - -e:在命令行中指定多个编辑命令。 - -n:不输出模式空间的内容。 示例:将文件中所有的"foo"替换为"bar",并将修改后的内容保存回原文件中:`sed -i 's/foo/bar/g' file.txt` 3. awk:用于处理文本文件的数据,可以将文件的内容分割成多个字段,并可以对每个字段进行操作。它使用类似于C语言的语法,并且可以通过条件和循环来过滤和处理数据。常用的选项包括: - -F:指定分隔符。 - -v:定义变量。 - -f:指定脚本文件。 示例:将文件中第一列数字相加,并输出总和:`awk '{sum += $1} END {print sum}' file.txt` 这些命令通常被组合使用,以便快速处理文本数据。例如,使用grep查找文件中特定的文本模式,然后使用sed对文本进行替换,最后使用awk对数据进行分析和汇总。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值