用于在Bash上更改访问权限和注册文件/目录名称的程序

作为实验室练习的一部分,我们需要编写一个脚本,当输入适当的键时,必须将文件/目录名称中字母的大小写从上到下更改,反之亦然,用单独的键将名称中每个单词的第一个字母的大小写更改为大写,不应该独立执行的命令执行相同的转换,但是将信息输出到终端并递归执行寄存器更改。

跟随老师的脚步,我们的脚本获得了更多功能。因此,在我们的脚本中,检查文件名和西里尔字母中是否存在禁止使用的字符,首先出现对写入权限的检查(我们决定将自己限制为具有写入权限的文件):

编码
if [[ -w \"$n\" ]]; then
if [[ "$adress" != *[--]* ]] && [[ "$adress" != *[\"\`\'\:\?\<\>\|\!]* ]]; then

在添加了各种检查并提供了各种错误之后,出现了问题,如果系统无法重现俄语,将会发生什么?问题是应该去的地方,因为 用户发布的所有信息均以俄语编写。有一阵子我们忽略了这个问题,老师不记得了,好的,但是我们重新编写了脚本并使用Zenity创建了图形界面。
为了方便起见,我们将脚本分成几个文件,在初始文件中设置变量,然后将其传递,并检查Zenity。

编码
pr_way=`pwd`
pr_way="${pr_way#*$USER/}"
pr_name="$0"
pr_name="${pr_name#*/}"
start_scr="0"
#----------------------------------------------------------------
if find /usr/bin/zenity
then
cd selection
./language.sh "$pr_way" "$pr_name" "$start_scr"
else
echo "Zenity is not installed on this computer."
fi


建立了完整的图形界面后,我们回到了语言问题。他们将自己限制为三种语言:俄语,英语和白俄罗斯语。根据您的系统语言自动选择语言,如果它不是这三种语言中的一种,则会打开一个语言选择窗口,您可以在其中自行选择。

编码
if [[ $LANG == *["ru"]* ]]; then
	./key-ru.sh "$pr_way" "$pr_name" "$start_scr"
elif [[ $LANG == *["en"]* ]]; then
	./key-en.sh "$pr_way" "$pr_name" "$start_scr"
elif [[ $LANG == *["by"]* ]]; then
	./key-by.sh "$pr_way" "$pr_name" "$start_scr"
elif [[ $LANG != *["ru"]* ]] && [[ $LANG == *["en"]* ]] && [[ $LANG == *["by"]* ]]; then
language=$(zenity \
	--list --width=400 --height=150 \
	--title="Language selection" \
	--text="Sorry. This program does not support your system language. Please, select language below." \
	--column="Language" \
	"Russian" \
	"English" \
	"Belarussian" )


图片

确定您将继续使用的语言后,将打开一个窗口,其中包含可供选择的键。

图片

通过选择键确定要执行的操作后,继续选择要用于执行此操作的文件/目录。

图片

完成工作后,程序将通知您发生了什么,并会询问您是否要继续。

图片

另外,我们在程序中添加了更改文件/目录访问权限的功能,这是我们先前的任务,因此决定将它们组合在一起。

编码

#!/bin/bash
#    
adress="$1"
pr_way="$2"
pr_name="$3"
echo 
cd
#     "/",  ,   /   - 
if [[ "$adress" == *["/"]* ]]; then
#    /  
way="${adress%/*}"
name="${adress##*/}"
cd "$way"
else
#   "/"  ,  /  
name="$adress"
fi
#     
format=$(zenity \
	--list --width=400 --height=150 \
	--title="   " \
	--text=", ,    ." \
	--column="" \
	"" \
	"" )
#    
if [ $? -eq "1" ];then
	exit
fi
case "$format" in
	)
#      
mod=$(zenity \
	--entry \
	--title="  " \
	--text=", , ,     '$name'.
     ,      0  7:
0 –   ;
1 –   ;
2 –   ;
3 –    ;
4 –   ;
5 –    ;
6 –    ;
7 –  ." \
	--entry-text="")
#    
if [ $? -eq "1" ];then
	exit
fi	
#    (3  ,     0  7)
if [[ $mod == *[0-7]* ]] && [[ ${#mod} = 3 ]]; then
#  
	chmod $mod "$name"
#  
	zenity --info --title=" " --text="'$name'    '$mod'."
else
	zenity --error --title="!" --text="    . ,         ."
fi
;;
	)
#     
mod=$(zenity \
	--entry --width=600 \
	--title="  " \
	--text="  ,     '$name'.
     ,      (u/g/o/a),
,    (+/-/=)      (r/w/x):
u – ;
g – ;
o – ;
a – ;
+ – ;
- – ;
= – ;
r – ;
w – ;
x – ." \
	--entry-text="")
#    
if [ $? -eq "1" ];then
	exit
fi
#             
if  [[ $mod == *[ugoa]*+*[rwx]* || $mod == *[ugoa]*-*[rwx]* || $mod == *[ugoa]*"="*[rwx]* ]]; then
	chmod $mod "$name"
	zenity --info --title="" --text="'$name'    '$mod'."
elif [[ $mod == +*[rwx]* ]] || [[ $mod == -*[rwx]* ]] || [[ $mod == =*[rwx]* ]]; then
	pre_mod="${mod%[-+=]*}"
	pre_mod+=" "
	if [[ $pre_mod == " " ]]; then
		pre_mod="${pre_mod/ /a}"
		echo "$pre_mod"
		pre_mod+="$mod"
		mod="$pre_mod"
		echo "$mod"
	fi
	chmod $mod "$name"
	zenity --info --title="" --text="'$name'    '$mod'."
else
	zenity --error --title="!" --text="    . ,         ."
fi
;;
esac
cd
cd ""$pr_way"/selection"
#         
next=$(zenity \
	--list --width=400 --height=200 \
	--title="  " \
	--text=", ,         ,
  , ,    ." \
	--column="" \
	" " \
	"   " )
case $next in
	" ") 
start_scr="0"
./key-ru.sh "$pr_way" "$pr_name" "$start_scr"
;;
	"   ") 
start_scr="C"
./key-ru.sh "$pr_way" "$pr_name" "$start_scr"
;;
esac


附带了我们所有工作的链接,以供您详细了解。

All Articles