Linux的shell编程前奏之基础技能实战一linux
前言:shell脚本语言是实现linux/unix系统管理及自动化运维所必备的重要工具,linux/unix系统的底层及基础应用软件的核心大都涉及shell脚本的内容shell
一>写一个简单的清理系统日志文件/var/log/messages的shell脚本程序。 编程
#!/bin/sh #此shell脚本用于清理/var/log/messages系统日志 LOG_DIR=/var/log ROOT_UID=0 if [ "$UID" -ne "$ROOT_UID" ] then echo "Must be root can run the shellScript" exit 1 fi cd $LOG_DIR ||{#若是切换到指定目录不成功,||前面的不成功就执行||后面的,&&前面的成功就执行&&后面的 echo "cannot change to necessary directory" exit 1 } cat /dev/null>messages &&{ echo "logs cleaned up" exit 0 } echo "Logs cleaned up fail." exit 1
总结:bash
1>shell是一个命令解释器,它的做用是解释执行用户输入的命令及程序,用户每输入一条命令,shell就执行解释一条。运维
2>由内到外,硬件---系统核心-----命令解释器----外围应用程序。shell存在于操做系统的最外层,负责与用户直接对话,把用户的输入解释给操做系统,并处理各类各样的操做系统的输出结果,而后输出到屏幕返回给用户。ide
输入系统用户名和密码并登录到linux后的全部操做都是由shell解释执行的。工具
3>shell脚本语言很适合用于处理纯文本类型的数据,是一种弱类型的语言,分为Bourne shell(sh,ksh,bash),C shell(csh,tcsh)。测试
4>linux经常使用操做系统默认的shell是bash,能够用echo $SHELL显示。spa
5>shell脚本的执行的两种方式:A.sh shell脚本名称 B. ./shell脚本名称操作系统
二>实现系统中屡次执行某一个脚本后的进程只有一个。
#!/bin/sh pidpath=/tmp/a.pid if [ -f "$pidpath" ] then kill "cat $pidpath" >/dev/null 2>&1 rm -f $pidpath fi echo $$ >$pidpath sleep 300
总结:
1>经常使用export来定义环境变量。若是但愿环境变量永久生效,则能够将其放在用户环境变量文件或者全局环境变量文件里。
2>经常使用(变量名=value)的形式定义普通变量。
当不加引号定义变量时,值里有变量的会被解析后再输出;
当加双引号定义变零时,值里有变量和命令(命令须要反引)的会被解析后再输出;
当加单引号定义变量时,,即便值里有变量和命令(命令须要反引)也会原样输出;
3>把一个命令的结果做为变量的内容赋值的方法:A. 变量名=`ls` B.变量名=$(ls)
4>用echo等命令输出变量的时候,也能够用不加引号,单引号,双引号,反引号,例如:echo $A,echo "$A",echo `$A`,echo '$A',和上面的总结一致。
5>经常使用文件测试操做符:
-d文件(directory) 文件存在且为目录则为真,即测试表达式成立。
-f文件(file) 文件存在且为普通文件则为真,即测试表达式成立。
-e文件(exist) 文件存在则为真,即测试表达式成立。
-r文件(read) 文件存在且可读则为真,即测试表达式成立。
-s文件(size) 文件存在且文件大小为零则为真,即测试表达式成立。
-w文件(write) 文件存在且可写则为真,即测试表达式成立。
-x文件(executable) 文件存在且可执行则为真,即测试表达式成立。
-L文件(link) 文件存在且为连接文件则为真,即测试表达式成立。
f1 -nt f2 文件f1比文件f2新则为真,即测试表达式成立。根据文件的修改时间来计算。
f1 -ot f2 文件f1比文件f2旧为真,即测试表达式成立。根据文件的修改时间来计算。