(文中粗体为输入命令,细体为输出)
脚本语言的优缺点:
使用脚本语言的优点是:它们多半运行在比编译型语言还高的层级,可以轻易处理文件与目录之类的对象。
缺点:效率不如编译型语言。
我们使用Shell脚本,主要是基于:
1,简单性。Shell是高级语言,通过Shell可以简洁地表达复杂操作。
2,可移植性。使用POSIX所定义的功能,能做到无需修改脚本就可以在不同系统运行。
3,开发容易。短时间内完成一个功能强大的脚本。
#!的作用:
可以通过在脚本文件第一行使用#!来告知UNIX内核 调用哪个Shell执行脚本。具体用法:#!+ Shell路径。
例:#! /bin/sh
调用/bin/sh解释脚本。
注意:#!有长度限制,各系统不同,使用时尽量不超过64个字符。
变量赋值方法:
先写变量名称,紧接=字符,最后是新值。当取出Shell变量的值时,在变量名称前加上$。
输出命令:
echo [string] 产生Shell脚本输出,输出最后带换行符,添加\c可不打印。
printf 类似C的printf用法。
重定向与管道:
tr命令
tr [options] source-char-file-list replace-char-list
用途:转换字符,详见选项。
以<改变标准输入
program < file可将program的标准输入改为file。
例:tr -d '\r' < dos-file.txt 将dos-file.txt中的回车删除。
以>改变标准输入
program > file可将program的标准输出改为file。
例:tr -d '\r' < dos-file.txt > UNIX-file.txt 将dos-file.txt中的回车删除后输出到UNIX-file.txt。
以>>附加到文件
program >> file可将program的标准输出附加到file的尾部。
以|建立管道
program1 | program2 可将program1的标准输出修改为program2的标准输入。
例:tr -d '\r' < dos-file.txt | sort > UNIX-file.txt 将dos-file.txt中的回车删除后,以管道传送进行排序,再输出到UNIX-file.txt。
基本命令查找:
最好准备自己的bin目录存放自己的脚本,并且让Shell能够自动寻找到它们。
例:
$
cd 切换到home目录
$
mkdir bin 建立个人bin目录
$
mv nuser bin 将自己的脚本置入该目录
$
PATH=$PATH:$HOME/bin 将个人bin目录附加到PATH
$
nuser 直接输入文件名执行
显示文件内容
简单执行跟踪:
在命令行中执行跟踪:(测试脚本为nuser)
例:
$
sh -x nuser 打开执行跟踪功能
+ who 被跟踪的命令
+ wc -1
7 实际的输出
在脚本里执行跟踪:
例:
$
cat > trace1.sh 建立脚本
#! /bin/sh 打开跟踪功能
set -x 做些事
echo 1st echo
set +x 关闭跟踪功能
echo 2nd echo 再做些事
^D 以end-of-file结尾
$
chmod +x trace1.sh 设置执行权限
$
./trace1.sh 执行脚本
+ echo 1st echo 被跟踪的第一行
1st cho 命令的输出
+ set +x 被跟踪的下一行
2nd echo 下一个命令的输出
执行时,set -x不会被跟踪,因为跟踪命令在这条命令执行后才打开。同理,set +x会被跟踪,因为跟踪功能在这条命令执行后才关闭。最后echo命令不被跟踪,因为此时跟踪功能已经关闭。