Linux的shell编程前奏之基础技能实战一
前言:shell脚本语言是实现linux/unix系统管理及自动化运维所必备的重要工具,linux/unix系统的底层及基础应用软件的核心大都涉及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
总结:
1>shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序,用户每输入一条命令,shell就执行解释一条。
2>由内到外,硬件---系统核心-----命令解释器----外围应用程序。shell存在于操作系统的最外层,负责与用户直接对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,然后输出到屏幕返回给用户。
输入系统用户名和密码并登陆到linux后的所有操作都是由shell解释执行的。
3>shell脚本语言很适合用于处理纯文本类型的数据,是一种弱类型的语言,分为Bourne shell(sh,ksh,bash),C shell(csh,tcsh)。
4>linux常用操作系统默认的shell是bash,可以用echo $SHELL显示。
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旧为真,即测试表达式成立。根据文件的修改时间来计算。