برنامج لتغيير حقوق الوصول وتسجيل أسماء الملفات / الدليل على 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