shell练习题之bash知识点(for循环if判断语句结构练习)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell练习题之bash知识点(for循环if判断语句结构练习)相关的知识,希望对你有一定的参考价值。

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配置文件
[[email protected] scripts]# vim myscripts.conf

userName=tom
fileName=/etc/passwd

2.2开始编写myscripts.sh脚本
[[email protected] 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
在编写脚本之前我们可以做个小测试:
[[email protected] scripts]# which wget
/usr/bin/wget
[[email protected] scripts]# echo $?
0


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

创建脚本vim download.sh 编写完使用-n检查下脚本语法(sh -n download.sh)
[[email protected] 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

[[email protected] 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}

以上是关于shell练习题之bash知识点(for循环if判断语句结构练习)的主要内容,如果未能解决你的问题,请参考以下文章

循环语句之双重循环练习

shell for循环练习题-等边三角形

shell命令

谢烟客---------Linux之bash脚本编程---if补充和for循环

学习笔记之for循环if循环小练习

shell if特殊 case判断for循环while循环breakcontinue