使用unix/linux的程序人员几乎都写过shell脚本,但这其中很多人都是为了完成功能而在网上找代码段,这样写出来的shell脚本在功能方面当然是没有什么问题,但是这样的方式不能写出优雅的shell脚本. 从今天开始,starfe就将自己平时在书写shell脚本过程中的经历做一总结,力图形成一个系列---"书写优雅的shell脚本". 在此,对"优雅"一词的定义有4点:(1)健壮:(2)结构清晰:(3)性能好:(4)力求简单. 好了,废话不多说,开始今天的主题:…
在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的.因为他返回当前路径的".". 这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外). 在/home/admin/test/下新建test.sh内容如下: cd `dirname $0` echo `pwd` 然后返回到/home/admin/执行 sh test/test.sh 运行结果: /home/admin/test 这样就可以知道一些…
shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中.当 $? == 0 时,表示执行成功:当 $? == 1 时,表示执行失败.  有时候,下一条命令依赖前一条命令是否执行成功.如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等.shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行.  &&(命…
在使用shell的逻辑运算符"[]"使用时候,必须保证运算符与算数之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(())"结构语句,就是对shell中算数及赋值运算的扩展.  1.语法:  ((表达式1,表达式2-))  2.特点:  (1)在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等.  (2)在双括号结构中,所有变量可以不加入:"$"符号前缀.  (3)双括号可以进行逻辑运算,四则运算 …
Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程.kill命令是通过向进程发送指定的信号来结束相应进程的.在默认情况下,采用编号为15的TERM信号.TERM信号将终止所有不能捕获该信号的进程.对于那些可以捕获该信号的…
shell之kill.killall.xkill.pkill 2013-01-08 22:03:28|  分类: Linux|举报|字号订阅 1 kill kill的应用是和ps 或pgrep 命令结合在一起使用的: kill 的用法: kill [信号代码] 进程ID 注:信号代码可以省略:我们常用的信号代码是 -9 ,表示强制终止: 举例: [root@localhost ~]# ps auxf |grep httpd root 4939 0.0 0.0 5160 708 pts/3 S+…
参考:<linux命令.编辑器与shell编程> <unix环境高级编程> exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两类:外部命令和内部命令.外部命令是通过系统调用或独立的程序实现的,如sed.awk等等.内部命令是由特殊的文件格式(.def)所实现,如cd.history.exec等等. 在说明exe和source的区别之前…
1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口. 用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数.由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的.下面列出的这些文件或子文件夹,并不是都是在你的系…
Linux中/proc/[pid]/status详细说明 博客分类: OS Linux多线程  [root@localhost ~]# cat /proc/self/status  Name: cat  State: R (running)  SleepAVG: 88%  Tgid: 5783  Pid: 5783  PPid: 5742  TracerPid: 0  Uid: 0 0 0 0  Gid: 0 0 0 0  FDSize: 256  Groups: 0 1 2 3 4 6 10 …
1. 将日期格式转为时间戳 获取当前时间:currenttime=`date "+%Y-%m-%d %H:%M:%S"` 结果:2015-04-13 11:15:43 将当前时间转为时间戳:timestamp=`date -d "$curtime" +%s` 结果:1428894966 2. 将时间戳转为日期格式 将当前时间戳转为日期格式: date -d "1970-01-01 UTC $timestamp seconds" "+%F…