博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell练习题之bash知识点(for循环、if判断语句结构练习)
阅读量:6206 次
发布时间:2019-06-21

本文共 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这个目录,如果有就退出,如果没有就创建目录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 $?
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 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}

转载于:https://blog.51cto.com/13233089/2107371

你可能感兴趣的文章
我的友情链接
查看>>
如何查找JSP页面中的错误
查看>>
2016 年总结
查看>>
将String转化成Stream,将Stream转换成String
查看>>
java路径Java开发中获得非Web项目的当前项目路径
查看>>
Google API设计指南-资源名称
查看>>
最全React技术栈技术资料汇总(收藏)
查看>>
【工具使用系列】关于 MATLAB 遗传算法与直接搜索工具箱,你需要知道的事
查看>>
Kali-linux Arpspoof工具
查看>>
PDF文档页面如何重新排版?
查看>>
基于http协议使用protobuf进行前后端交互
查看>>
UML设计一个电影票务销售系统(四)
查看>>
AlphaGo Zero用它来调参?【高斯过程】到底有何过人之处?
查看>>
《Redis官方教程》Redis集群规范(二)
查看>>
Linux平台Oracle多个实例启动说明
查看>>
bash腳本編程之三 条件判断及算数运算
查看>>
php cookie
查看>>
linux下redis安装
查看>>
Sqlserver表值函数
查看>>
弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
查看>>