本文共 3538 字,大约阅读时间需要 11 分钟。
如同其他语言一样,通过我们使用任意一种文字编辑器,比如 nedit、kedit、emacs
、vi 等来编写我们的 shell 程序。程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh 来执行程序。当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行:chmod +x filename然后,您可以通过输入: ./filename 来执行您的脚本。在其他编程语言中您必须使用变量。在 shell 编程中,所有的变量都由字符串组成,
并且您不需要对变量进行声明。>>本地变量设置变量引用变量清除变量查看变量>>环境变量
设置环境变量:• 引用环境变量 :• 常用环境变量– HOME– PATH– TERM– UID– PWD– PS1>>特殊的预定义变量
$#:存储shell程序中命令行参数的个数$?:存储shell中上一个程序执行的返回值(0表 示命令执行成 功,非0有问题)$0:存储shell程序自己的名称$[1-n]:存储第[1-n]个命令行参数∗:存储shell脚本的所有参数(不包含∗:存储shell脚本的所有参数(不包含0)$$:存储shell脚本的进程号(pid)$!:存储上一个后台执行命令的进程号(pid)通过一个简单的test.sh脚本来学习:
1 2 3 4 5 6 | #!/bin/sh echo "number:$#" echo "scname:$0" echo "first :$1" echo "second:$2" echo "argume:$@" |
执行脚本:
1 2 3 4 5 6 | # ./test.sh aa bb number:2 scname:. /test02 .sh first :aa second:bb argume:aa bb |
通过显示结果可以看到:
$# 是传给脚本的参数个数 $0 是脚本本身的名字 $1是传递给该shell脚本的第一个参数 $2是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表echo "some text": 将文字内容打印在屏幕上
ls: 文件列表wc -l filewc -w filewc -c file&: 计算文件行数计算文件中的单词数计算文件中的字符数cp sourcefile destfile&: 文件拷贝mv oldname newname : 重命名文件或移动文件rm file&: 删除文件grep 'pattern' file&: 在文件内搜索字符串比如:grep 'searchstring'file.txtcut -b colnum file&: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第 5 个到第 9 个字符 cut -b5-9 file.txt 千万不要和 cat 命令混淆,这是两个完全不同的命令cat file.txt: 输出文件内容到标准输出设备(屏幕)上file somefile&: 得到文件类型read var: 提示用户输入,并将输入赋值给变量sort file.txt: 对 file.txt 文件中的行进行排序uniq: 删除文本文件中出现的行列比如: sort file.txt | uniqexpr: 进行数学运算 Example: add 2 and 3expr 2 "+" 3find: 搜索文件比如:根据文件名搜索 find . -name filename -printtee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfilebasename file&: 返回不包含路径的文件名比如: basename /bin/tux 将返回 tuxdirname file&: 返回文件所在路径比如:dirname /bin/tux 将返回 /binhead file&: 打印文本文件开头几行tail file : 打印文本文件末尾几行sed: Sed 是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和 shell 中的通配符相混淆。比如:将 linuxfocus 替换为 LinuxFocus :cattext.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file"if" 表达式 如果条件为真则执行 then 后面的部分:
if ....; then....elif ....; then....else....fi大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等... 通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。[ -f "somefile" ] :判断是否是一个文件[ -x "/bin/ls" ] :判断/bin/ls 是否存在并有可执行权限[ -n "var"]:判断var"]:判断var 变量是否有值[ "a"="a"="b" ] :判断a和a和b 是否相等
一个函数是这个样子的
:functionname(){ # inside the body $1 is the first argument given to the function# $2 the second ...body}
任何优秀的脚本都应该具有帮助和输入参数。
最简单的调试命令当然是使用 echo 命令。
可以使用 echo 在任何怀疑出错的地方打印任何变量值。shell 也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这样来进行调试:sh -x strangescript这将执行该脚本并显示所有变量的值。shell 还有一个不需要执行脚本只是检查语法的模式。可以这样使用:sh -n your_script这将返回所有语法错误。shell中条件判断if中的-z到-d的意义
[ -a FILE ] 如果 FILE 存在则为真。[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。[ -d FILE ] 如果 FILE 存在且是一个目录则为真。[ -e FILE ] 如果 FILE 存在则为真。[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。[ -r FILE ] 如果 FILE 存在且是可读的则为真。[ -s FILE ] 如果 FILE 存在且大小不为0则为真。[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。[ -x FILE ] 如果 FILE 存在且是可执行的则为真。[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/4823050.html,如需转载请自行联系原作者