`
banxi1988
  • 浏览: 153925 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

shell学习与使用,边学边用之二(坑爹的空格)

阅读更多
下面是一个简单的shell程序。(来自 expert shell scripting一书 后面没有特殊说明也是一此书中的一些代码示例。为基础修改而来)
#!/bin/sh
#set -x
echo -n "Can you write device drivers(y/n)?"
read answer
answer = ‘echo $answer | tr [a-z] [A-Z]’
if[ $answer = Y] then;
	echo "Wow,you must be very skilled!"
esle
	echo "Neither can I,I'm just an example shell script"
fi

上面存在一些错误。
其一:
'echo $answer |  tr [a-z] [A-Z]'
中的单引号应该为tab键上面的反单引号才会把里面的字符串当成是代码,否则就是一个字符串。

空格啊空格啊:
其二:
if[ $answer = Y]
中一句中,"if["三个字符中,没有空格会引起下面的错误报告。

./set_x_disable.sh: 6: if[: not found
[/quote]
显然Y之后也需要有空格。
所以[]之前必须有空格。

其三: answer = 'echo ...' 一句中还有一处错误就是。
“answer”和 “=” 及"'echo'"号之间不能有空格。
否则报错如下:
引用

./set_x_disable.sh: 5: answer: not found

如果在等号右边有空格的话还会把空格当成answer字符串开头值的第一个字符。
坑爹有空格啊。

开始"set -x"运行几次之后。修改之后的脚本代码如下:
#!/bin/sh
set -x
echo -n "Can you write device drivers(y/n)?"
read answer
answer=`echo $answer | tr [a-z] [A-z]`
if [ $answer = Y ] 
then
	echo "Wow,you must be very skilled!"
else
	echo "Neither can I,I'm just an example shell script"
fi

下面是开启了"set -x"之后的两次运行结果:
banxi1988@banxi:~/work/shell$ ./set_x_disable.sh 
+ echo -n Can you write device drivers(y/n)?
Can you write device drivers(y/n)?+ read answer
n
+ echo n
+ tr [a-z] [A-z]
+ answer=N
+ [ N = Y ]
+ echo Neither can I,I'm just an example shell script
Neither can I,I'm just an example shell script
banxi1988@banxi:~/work/shell$ ./set_x_disable.sh 
+ echo -n Can you write device drivers(y/n)?
Can you write device drivers(y/n)?+ read answer
y
+ echo y
+ tr [a-z] [A-Z]
+ answer=Y
+ [ Y = Y ]
+ echo Wow,you must be very skilled!
Wow,you must be very skilled!
banxi1988@banxi:~/work/shell$ 


关于"set -x"命令的一些附加说明:
使用set命令其实就是使用shell选项来显示脚本运行时的冗余输出。
set命令的一个功能就是打开和关闭shell中的各种选项。在这种情况下,设置的选项是-x或xtrace,这样在运行脚本时,除了正常的输出之处。还会显示代码运行前每一行代码的扩展命令和变量。
如果在脚本文件中加入了命令"set -x"(xtrace)那么在set命令之后执行的每一条命令以及加在命令行中的任何参数(包含变量和变量的值)都会显示出来。每一行之前都会加上加号(+)提示它是跟踪输出的标识。在子shell中执行的shell跟踪命令会加两个加号即"++"。

查看扩展变量值另一个选择就是启用"set -v"命令。
启用"set -v"选项之后的一次运行如下:(没有启用"set -x")
banxi1988@banxi:~/work/shell$ ./set_x_disable.sh
echo -n "Can you write device drivers(y/n)?"
Can you write device drivers(y/n)?read answer
y
answer=`echo $answer | tr [a-z] [A-Z]`
if [ $answer = Y ] 
then
	echo "Wow,you must be very skilled!"
else
	echo "Neither can I,I'm just an example shell script"
fi
Wow,you must be very skilled!
banxi1988@banxi:~/work/shell$ 



命令的打开与关闭:
和所有的shell选项一样。x(xtrace)和v它们都可以关闭。关闭和打开的语法是相反的。
除了如前面所述使用如-x的减号(-)来打开一个选项,也可以使用加号,例如+x来关闭某个选项。这样就可以在某个点关闭某个选项。这在只需要调试一小段代码时非常有用。
这个时候只需要在代码的错误区域之前打开选项,在错误区域之后关闭选项就可以完成调试了。

关于上面用到的将用户输入的小写转变为大写的
'tr [a-z] [A-Z]的说明如下:
banxi1988@banxi:~/work/shell$ tr --help
用法:tr [选项]... SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
仅在SET1 和SET2 都给出,同时没有-d 选项的时候才会进行替换。
仅在替换时才可能用到-t 选项。如果需要SET2 将被通过在末尾添加原来的末字符的方式
补充到同SET1 等长。SET2 中多余的字符将被省略。只有[:lower:] 和[:upper:]
以升序展开字符;在用于替换时的SET2 中以成对表示大小写转换。-s 作用于SET1,既不
替换也不删除,否则在替换或展开后使用SET2 缩减。

==================未完待续……==============

分享到:
评论

相关推荐

    LinuxShell脚本学习基础视频

    资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...

    shell学习,第一章

    Shell学习第一章主要涵盖了Shell脚本语言的基础知识,包括Shell的介绍、基本语法、变量和字符串操作等内容。以下是对这些知识点的详细阐述: 1. **Shell介绍**:Shell是一种命令行解释器,它允许用户与操作系统进行...

    linux shell学习资料

    Linux Shell是Linux操作系统中用于与系统交互的一种命令行界面,它是用户与Linux内核之间的桥梁。Shell不仅可以执行单一的命令,还可以通过编写脚本实现复杂的自动化任务。在本学习资料包中,包含了三本关于Linux ...

    shell学习资料01

    shell学习01

    实用的shell学习资料

    **实用的Shell学习资料概述** Shell是Linux和Unix操作系统中的一种命令解释器,它作为用户与操作系统之间交互的界面,允许用户输入命令并执行。在众多的Shell中,Bash(Bourne Again SHell)是最流行的一个,广泛...

    shell基础学习资料

    - **变量引用**:在Shell脚本中引用变量时,直接使用变量名即可,但为了避免变量名与普通文本混淆,推荐使用花括号`{}`进行明确界定。 - **示例**:错误的引用方法与正确的引用方法对比: ```bash num=2 echo ...

    SHELL基础学习指导

    Shell是一种用户与Linux操作系统之间交互的接口。它主要负责解释用户输入的命令并将其传递给Linux核心来执行。Shell不只是一个简单的命令解释器,它自身具备一套完整的命令集,允许用户在提示符下进行操作。Shell...

    shell脚本学习手册

    《Shell脚本学习手册》 Shell,是Linux系统中的一种命令语言和程序设计语言,它由C语言编写,作为用户与操作系统内核交互的桥梁。Shell不仅提供了命令行接口,还允许用户编写脚本程序,实现自动化任务处理。本文将...

    shell脚本学习指南,中文清晰带书签

    ### Shell脚本学习指南知识点详解 #### 一、Shell脚本概述 - **定义与作用**:Shell脚本是用于Unix/Linux系统中的自动化任务的一种编程语言。它通过一系列的命令来实现对系统的控制和管理,可以极大地提高工作效率...

    shell学习资料

    尤其对于系统管理员和需要进行自动化脚本编写的开发者来说,掌握Shell编程和使用技巧是基础技能之一。随着实践经验的积累,用户会更加深入地了解Shell的高级特性,并能够编写出更加复杂和强大的脚本来处理各种系统...

    shell脚本学习指南

    **Shell脚本学习指南** Shell脚本是Linux和Unix系统中的强大工具,它允许用户通过编写脚本来自动化一系列命令操作,极大地提高了系统管理和任务执行的效率。本文将深入探讨shell脚本的基础知识,包括语法、变量、...

    linux shell脚本学习文档

    Linux Shell脚本是Linux系统中用于自动化任务处理的编程语言,尤其在系统管理、文件操作、数据处理等方面有着广泛的应用...这份文档对于初学者来说是一份宝贵的资源,能够引领你走进Shell脚本的世界,开启自动化之旅。

    shell脚本学习指南pdf

    **Shell脚本学习指南** Shell脚本是一种在Unix/Linux操作系统中使用的编程语言,它允许用户通过命令行界面执行一系列操作,实现自动化任务处理。作为学习Shell脚本的指南,这本书籍旨在帮助读者深入理解Shell脚本...

    shell脚本学习ppt

    一些shell脚本的学习指南。一些典型的例子

    很不错的Linux Shell的详细学习文档

    #### 二、为什么要学习Shell编程? 1. **灵活性与自动化**:Shell提供了丰富的命令集和控制结构,可以轻松编写脚本来完成自动化任务。 2. **系统管理**:对于系统管理员来说,Shell脚本是管理和维护服务器的重要...

    shell编程学习文档

    Shell学习的好帮手Shell学习的好帮手Shell学习的好帮手Shell学习的好帮手Shell学习的好帮手

Global site tag (gtag.js) - Google Analytics