Linux的shell编程前奏之基础技能实战一

                                                                             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旧为真,即测试表达式成立。根据文件的修改时间来计算。





















                                               

猜你喜欢

转载自blog.51cto.com/11218855/2348760