bash知识点:文件测试 [ ] [[ ]] test 单目测试: -e file :测试文件是否存在 -a file :测试文件是否存在 -f file: 测试是否为普通文件 -d 目录: 测试是否为目录文件 -h file: 测试是否为链接文件 -r somefile: 测试其有效用户是否对此文件有读取权限 -w somefile: 测试其有效用户是否对此文件有写权限 -x somefile: 测试其有效用户是否对此文件有执行权限

-b somefile : 测试文件是否存在并且是否为一个块设备文件
-c somefile : 测试文件是否存在并且是否为一个字符设备文件
-h|-L somefile : 测试文件是否存在并且是否为符号链接文件
-p somefile : 测试文件是否存在并且是否为管道文件:
-S somefile : 测试文件是否存在并且是否为套接字文件:
-s somefile:  测试文件是否存在并且不空

双目测试: file1 -nt file2 :测试file1是否比file2更 新一些 file1 -ot file2 :测试file1是否比file2更 老一些

在脚本中使用source命令倒入别的文件 [ -r 配置文件 ] && cource 配置文件

bash的知识点:位置参数轮替 shift

练习题: 一、编辑一个脚本,判断/tmp目录下有没有1这个目录,如果有就退出,如果没有就创建目录1 1)在命令行执行以下命令: fileName=/tmp/1 [ -e $fileName ] || mkdir $fileName


解释:1.使用变量fileName=/tmp/1 2.[ ]中括号里面-e表示 :如果目录/tmp下有目录1则为true(真);否则为false(假) 3.为true(真)则不执行后面的mkdie $fileName,为false(假)则执行

二、编写一个可调用.conf配置文件的脚本 2.1首先在/tmp/scripts目录下创建一个.conf配置文件 [root@localhost scripts]# vim myscripts.conf

userName=tom fileName=/etc/passwd

2.2开始编写myscripts.sh脚本 [root@localhost scripts]# vim myscripts.sh #!/bin/bash source /tmp/scripts/myscripts.conf echo $userName

2.3给myscripts.sh脚本加定义* #!/bin/bash #configfile:/temp/scripts/myscripts.conf [ -r /tmp/scripts/myscripts.conf ] && source /tmp/scripts/myscripts.conf #source可以用.表示 userName=${userName=Jerry} echo $userName


解释:1.创建myscripts.conf配置文件 2.使用vim编辑myscripts.sh脚本 3.添加注释,配置文件目录路径, 4.使用[ -r 文件绝对路径 ]来判断文件是否存在,#-r 表示当前用户是否对文件有读权限 5.如果前面为true(真)那么使用source或.调用myscripts.conf配置文件,并将myscripts.conf中的userName变量内容输出 6.如果前面为false(假),后面就忽略;直接打印脚本内定义的变量内容(输出内容: Jerry)

三、编写一个脚本,将/var/log拷贝到/tmp/logs 在编写脚本之前我们可以做个小测试: [root@localhost scripts]# which wget /usr/bin/wget [root@localhost scripts]# echo $?


解释:利用wich wget判定这个wget这个命令存不存在

创建脚本vim download.sh 编写完使用-n检查下脚本语法(sh -n download.sh) [root@localhost scripts]# vim download.sh

#!/bin/bash url='ftp://192.168.100.157/hzftp/IP%C9%A8%C3%E8%B9%A4%BE%DF.exe' which wget &> /dev/null || exit 5 downloader=which wget [ -x$downloader ] || exit 6 $downloader $url


解释:1.添加一个url 2.利用which判定wget存不存在,将结果输出到空(>/dev/null);不存在即退出。 3.使用变量downloader定义为which wget 4.然后利用[ -x ]来判定当前用户是否对downloader有执行权限,没有则退出 5.执行$downloader $url(效果等于wget ftp://192.168.100.157/hzftp/IP%C9%A8%C3%E8%B9%A4%BE%DF.exe)

四、写一个脚本,完成以下任务: 1.分别复制/var/log下的文件复制到/tmp/logs目录中 2.复制目录时,才使用cp -r 3.复制文件时,使用cp 4.复制链接文件,使用cp -d 5.如果是其他文件,使用cp -a

[root@localhost scripts]# vim cplog.shs

 copyCommand='cp'

elif [ -f $fileName ]; then #!/bin/bash

targetDir='/tmp/logs'

[ -e $targeDir ] || mkdir $targeDir for fileName in /var/log/*;do if [ -d $fileName ]; then copyCommand='cp -r' elif [ -f $fileName ]; then copyCommand='cp'
elif [ -h $fileName ]; then copyCommand='cp -d' else copyCommand='cp -a' fi

$copyCommand $fileName $targetDir done


解释:1.编辑变量目标目录(targetDir) 2.判断目标目录是否存在,不存在则创建 3.for循环语句(将/var/log下面所有文件拷贝) 4.if判断语句([ -d ]对应目录文件,[ -f ]对应普通文件,[ -h ]对应链接文件,[ -a ]对应其他文件 5.将变量按照先后循序排列(拷贝命令 文件 目标目录) ~
~
~
~
~
~
五、编写一个脚本,完成以下任务 script.sh {start|stip|restart|status} 如果为空,则显示帮助信息 script.sh {start|stip|restart|status}