本文共 3020 字,大约阅读时间需要 10 分钟。
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这个目录,如果有就退出,如果没有就创建目录11)在命令行执行以下命令: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.confuserName=tom
fileName=/etc/passwd2.2开始编写myscripts.sh脚本
[root@localhost scripts]# vim myscripts.sh#!/bin/bashsource /tmp/scripts/myscripts.confecho $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 $?0解释:利用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 5downloader=which wget
[ -x$downloader ] || exit 6$downloader $url 解释:1.添加一个url
2.利用which判定wget存不存在,将结果输出到空(>/dev/null);不存在即退出。3.使用变量downloader定义为which wget4.然后利用[ -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 -r3.复制文件时,使用cp4.复制链接文件,使用cp -d5.如果是其他文件,使用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/*;doif [ -d $fileName ]; thencopyCommand='cp -r'elif [ -f $fileName ]; thencopyCommand='cp' elif [ -h $fileName ]; thencopyCommand='cp -d'elsecopyCommand='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}转载于:https://blog.51cto.com/13233089/2107371