高级Bash脚本编程指南(2):带着一个Sha-Bang出发
来源:互联网 发布:天天炫斗刷钻石软件 编辑:程序博客网 时间:2024/05/17 08:08
特别说明,Sha-Bang 指的是 ( #! ) 。
在一个最简单的例子中,一个shell脚本其实就是将一堆系统命令列在一个文件中。它的最基本的用处就是,在你每次输入特定顺序的命令时,可以少敲一些字。
以清除/var/log下的某些log文件的脚本为例:
cd /var/logcat /dev/null > messagescat /dev/null > wtmpecho "Logs clean up"
但是该脚本有很多问题,而且也不规范,运行该脚本得到如下结果:
对该脚本进行改良,得到如下脚本:
#!/bin/bashLOG_DIR=/var/logcd $LOG_DIRcat /dev/null > messagescat /dev/null > wtmpecho "Logs clean up."exit
相比于第一个脚本,该脚本主要做了三个改进:
- 脚本的第一行为#!/bin/bash,这是一个Bash脚本的正确的开头部分;
- 使用变量来指定日志目录,使用变量比把代码写死要好的多。
- 脚本的最后一行使用exit命令,这个命令是一种正确并且合适的退出脚本的方法。
接下来看一个真正意义的脚本:
#!/bin/bash# Copyright (C) fuchencong@163.comLOG_DIR=/var/logROOT_UID=0LINES=50E_XCD=66E_NOTROOT=67if [ "$UID" -ne "$ROOT_UID" ]then echo "Must be root to run this script." exit $E_NOTROOTfiif [ -n "$1" ]then lines=$1else lines=$LINESficd $LOG_DIRif [ `pwd` != "$LOG_DIR" ]then echo "Can't change to $LOG_DIR." exit $E_XCDfi# more efficent way# cd $LOG_DIR || {# echo "Cannot change to necessary directory." > &2# exit $E_XCD# }tail -$lines messages > mesg.tmpmv mesg.tmp messages: > wtmpecho "Logs cleaned up."exit 0
在每个脚本的开头都是用”#!”,这意味着告诉你的系统这个文件的执行需要指定一个解释器。”#!”是一个两个字节的魔数字,是一个指定文件类型的特殊标记,换句话说,指的就是一个可执行脚本。在#!之后接着是一个路径名,这个路径名指定了一个解释脚本中命令的程序。这个程序可以是shell,或者任意一个通用程序。这个指定的程序从头开始解释并且执行脚本中的命令(从#!下边的一行开始)。
#!也可以被忽略,此时这样的脚本文件就只是命令的集合,无法使用shell内建的指令了。
可以玩一些小技巧:
#!/bin/moreshow line 1show line 2show line 3show line 4show line 5show line 6show line 7show line 8show line 9show line 10
上面这个脚本指定more命令作为解释器,运行时会把自己进行显示:
#!行最重要的任务就是命令解释器。因为这行是#开始的,当命令解释器执行这行代码时,会把它作为一个注释行。当然,在这之前,这行语句已经完成了它的任务,就是调用命令解释器。
调用一个脚本:
编写完脚本之后,可以使用sh scriptname或者bash scriptname来调用它。更方便的方法是让脚本本身就具有可执行权限,然后使用./scriptname的方式来执行它。
在脚本被测试和debug后,你可以把它移动到/usr/local/bin,来让你的脚本对所有用户都有用,这样用户就可以直接输入脚本名字来运行了。
- 高级Bash脚本编程指南(2):带着一个Sha-Bang出发
- 高级Bash脚本编程指南(1):从一个简单的script出发
- 高级Bash脚本编程指南
- 高级Bash脚本编程指南
- 高级Bash脚本编程指南
- 高级Bash脚本编程指南
- 高级Bash脚本编程指南
- 高级Bash脚本编程指南
- 高级Bash脚本编程指南
- 高级bash脚本编程指南
- 高级Bash脚本编程指南(2):Shell特殊字符
- 高级Bash脚本编程指南(32):混杂命令(一)
- 高级Bash脚本编程指南学习笔记
- 高级Bash脚本编程指南--网页版
- 高级Bash脚本编程指南(15):循环
- 高级Bash脚本编程指南 一个对脚本编程技术的深入探讨
- Shell编程关于Sha-Bang(#!)
- 高级Bash脚本编程
- 【OVS2.5.0源码分析】datapath之流表创建过程
- iBator 数据库操作
- Android 捕获全局异常
- 背包实现
- ip 子网数目 网络号 主机号 广播地址 可用IP地址范围
- 高级Bash脚本编程指南(2):带着一个Sha-Bang出发
- java 多线程2
- ScrollView与RelativeLayout一起用,显示有问题的解决方法
- ReadImport
- 贪心(Fabled Rooks,uva 11134)
- python socket基本过程之一(client)
- 【C#MVC4】菜单管理和访问权限分配(三)
- 联想G480类似没有小键盘开关的机器
- Spring Boot 使用Java代码创建Bean并注册到Spring中