[Linux] Shell脚本函数:cd命令保护函数

1. 关于cd命令

cd命令在Linux中常用的是进入文件夹的操作,其对象常为某个目录。

命令代码:

cd directory_or_file_name

当命令成功时,返回0,并进入指定目录或文件;
当命令失败时,返回错误信息,无法进入目录。

2. cd命令保护函数

在实际脚本的编写中,经常要使用cd命令,而在使用前,需要保证该文件夹路径存在且可访问,于是,编写一个cd命令保护的函数是有必要的。本文中的cd命令保护函数就是针对在较复杂脚本中,避免因为cd命令执行错误而导致后续程序错误。

需要的函数应满足:
(1)通过设定的cd命令错误次数控制命令尝试次数;
(2)当cd命令无法完成时,立即退出shell;
(3)输出应有的提示信息及函数结束后所在路径。

函数代码:

#! /bin/bash

function cd_protect()
{
	fail_count=0	# cd命令失败计数
	cd_return=1	# cd命令返回值初始化为1
	n=3	# 失败上限设定为3
	while [ $cd_return -ne 0 ] ; do	# 当cd_return不为0时执行循环
		cd "${1}"	# 执行cd命令
		cd_return=$?	# cd_return=上一命令的返回值,即cd命令返回值
		if [ $cd_return -ne 0 ] ; then	# 当cd_return不等于0时进入if
			fail_count=$(($fail_count+1))	# 失败计数+1
			if [ $fail_count -gt n ] ; then	# 当失败计数达到n次时进入if
				echo "Fail to cd"	# 输出失败提示信息
				pwd	#输出当前目录
				exit 1	# 立即退出当前shell
			else
				sleep 3	# 命令暂停3秒
			fi
		fi
	done
	echo "Success to cd"	#输出成功提示信息
	pwd	#输出当前目录
}

3. cd命令保护函数测试

测试函数在三种不同情况下的结果,包括:
(1)存在并有访问权限的文件夹test;
(2)存在但无访问权限的文件夹test1;
(3)不存在的文件夹test2。
通过查看运行结束时的输出的提示信息以及当前路径来检查是否满足函数要求。

关于测试代码及环境:
测试代码直接写在函数文件下方来运行测试。
在终端Terminal运行该shell脚本。
测试环境为Ubuntu 18.04.1 LTS。

(1)存在并有访问权限的文件夹test:

测试代码:

cd_protect "/home/ubuntu/Desktop/test"

终端输出结果:

Success to cd
/home/ubuntu/Desktop/test

对于存在并有访问权限的文件夹,可以成功进入目录。

(2)存在但无访问权限的文件夹test1:

测试代码:

cd_protect "/home/ubuntu/Desktop/test1"

终端输出结果:

/home/ubuntu/Desktop/cd_protect_test.sh: line 9: cd: /home/ubuntu/Desktop/test1: Permission denied
/home/ubuntu/Desktop/cd_protect_test.sh: line 9: cd: /home/ubuntu/Desktop/test1: Permission denied
/home/ubuntu/Desktop/cd_protect_test.sh: line 9: cd: /home/ubuntu/Desktop/test1: Permission denied
Fail to cd
/home/ubuntu

对于存在但无访问权限的文件夹,会显示Permission denied,但函数会循环直到大于设定的错误次数,并且当前目录并无变化。

(3)不存在的文件夹test2:

测试代码:

cd_protect "/home/ubuntu/Desktop/test2"

终端输出结果:

/home/ubuntu/Desktop/cd_protect_test.sh: line 9: cd: /home/ubuntu/Desktop/test2: No such file or directory
/home/ubuntu/Desktop/cd_protect_test.sh: line 9: cd: /home/ubuntu/Desktop/test2: No such file or directory
/home/ubuntu/Desktop/cd_protect_test.sh: line 9: cd: /home/ubuntu/Desktop/test2: No such file or directory
Fail to cd
/home/ubuntu

同(2)相同,结果无法进入指定目录,当前目录并无变化。cd命令提示的信息则是No such file or directory,但函数仍会循环直到大于设定的错误次数。

4. 总结

当cd命令执行出现错误后,仍会直接继续执行后续代码而仅仅返回错误信息,这会导致在后续的程序运行中出现可能的更大的问题。使用该函数正是为了有效避免问题的发生,能够在无法进入文件夹的情况下及时断开程序。当然,该函数也可扩展用于例如检查某个程序运行期间是否生成或存在文件夹或文件,也可用做某个触发条件等等。

–注:本文为原创,未经允许,禁止转载!–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值