shell编程基础
1、在创建shell脚本文件时,必须在文件的第一行指定要使用的shell。其格式为:
#!/bin/bash
2、显示消息
A、默认情况下,不需要使用引号将要显示的文本字符串划定出来。
B、echo命令可用单引号或双引号来划定文本字符串。如果在字符串中用到了它们,你需要在
文本中使用其中一种引号,而用另外一种来将字符串划定起来。
$ echo "This is a test to see if you're paying attention"
This is a test to see if you're paying attention
$ echo 'Rich says "scripting is easy".'
Rich says "scripting is easy".
$
C、但如果想把文本字符串和命令输出显示在同一行中,该怎么办呢?
可以用echo语句的-n参数。只要将第一个echo语句改成这样就行:
echo -n "The time and date are: "
D、`echo "The date and time are: " $testing`
3、使用变量
A、有两种方法可以将命令输出赋给变量:
1、反引号字符(`)
2、$()格式
#!/bin/bash
# copy the /usr/bin directory listing to a log file
today=$(date +%y%m%d)
ls /usr/bin -al > log.$today
today变量是被赋予格式化后的date命令的输出。这是提取日期信息来生成日志文件名常用
的一种技术。+%y%m%d格式告诉date命令将日期显示为两位数的年月日的组合。
$ date +%y%m%d
140131
$
4、重定向输入和输出
4.1、输出重定向
最基本的重定向将命令的输出发送到一个文件中。bash shell用大于号(>)来完成这项功能:
command > outputfile
之前显示器上出现的命令输出会被保存到指定的输出文件中。
$ date > test6
$ ls -l test6
-rw-r--r-- 1 user user 29 Feb 10 17:56 test6
$ cat test6
Thu Feb 10 17:56:58 EDT 2014
想要将命令的输出追加到已有文件中可以用双大于号(>>)来追加数据
$ date >> test6
$ cat test6
user pts/0 Feb 10 17:55
Thu Feb 10 18:02:14 EDT 2014
$
test6文件仍然包含早些时候who命令的数据,现在又加上了来自date命令的输出
4.2、输入重定向
输入重定向将文件的内容重定向到命令
输入重定向符号是小于号(<):command < inputfile
这里有个和wc命令一起使用输入重定向的例子。
$ wc < test6
2 11 60
$
wc命令可以对对数据中的文本进行计数。默认情况下,它会输出3个值:
文本的行数
文本的词数
文本的字节数
通过将文本文件重定向到wc命令,你立刻就可以得到文件中的行、词和字节的计数。这个例子说明test6文件有2行、11个单词以及60字节还有另外一种输入重定向的方法,称为内联输入重定向,内联输入重定向符号是远小于号(<<)除了这个符号,你必须指定一个文本标记来划分输入数据的开始和结尾。任何字符串都可作为文本标记,但在数据的开始和结尾文本标记必须一致。
command << marker
data
marker
在命令行上使用内联输入重定向时,shell会用PS2环境变量中定义的次提示符(参见第6章)来提示输入数据。下面是它的使用情况。
$ wc << EOF
> test string 1
> test string 2
> test string 3
> EOF
3 9 42
$
次提示符会持续提示,以获取更多的输入数据,直到你输入了作为文本标记的那个字符串。
wc命令会对内联输入重定向提供的数据进行行、词和字节计数
5、退出脚本
5.1、查看退出状态码
Linux提供了一个专门的变量$?来保存上个已执行命令的退出状态码
$ date
Sat Jan 15 10:01:30 EDT 2014
$ echo $?
0
$
一个成功结束的命令的退出状态码是0。如果一个命令结束时有错误,退出状态码就是一个正数值。
$ asdfg
-bash: asdfg: command not found
$ echo $?
127
$
5.2、exit 命令
退出状态码最大只能是255
$ cat test14b
#!/bin/bash
# testing the exit status
var1=10
var2=30
var3=$[$var1 * $var2]
echo The value is $var3
exit $var3
$
现在运行它的话,会得到如下输出。
$ ./test14b
The value is 300
$ echo $?
44
$
指定的值是300(返回值),余数是44,因此这个余数就成了最后的状态退出码。