Programme pour changer les droits d'accès et enregistrer les noms de fichiers / répertoires sur Bash

Dans le cadre des exercices en laboratoire, nous devions écrire un script qui, lors de la saisie de la clé appropriée, devait changer la casse des lettres dans le nom du fichier / répertoire de haut en bas et vice versa, changer la casse de la première lettre de chaque mot du nom en haut, avec des touches séparées, qui ne doivent pas être exécutés indépendamment, effectuer les mêmes conversions, mais avec la sortie d'informations vers le terminal et effectuer des changements de registre de manière récursive.

Avec les pas de l'enseignant, notre script a acquis des fonctionnalités supplémentaires. Ainsi, dans notre script, tout d'abord, la présence de caractères interdits dans les noms de fichiers et l'alphabet cyrillique est apparue, une vérification des autorisations d'écriture (nous avons décidé de nous limiter aux fichiers avec des autorisations d'écriture):

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

Après avoir ajouté divers contrôles et prévu divers types d'erreurs, la question s'est posée, que se passera-t-il si le système ne peut pas reproduire la langue russe? La question était de savoir où aller, car Toutes les informations émises par l'utilisateur ont été rédigées en russe. Pendant un moment, nous avons ignoré cette question, le professeur ne s'en souvenait pas, d'accord, mais nous avons refait notre script et créé une interface graphique pour cela en utilisant Zenity.
Pour plus de commodité, nous divisons le script en plusieurs fichiers, dans le fichier initial, nous définissons les variables, qui sont ensuite transmises, et nous vérifions Zenity.

Le code
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


Après avoir réalisé une interface entièrement graphique, nous sommes revenus à la question de la langue. Ils se sont limités à trois langues: russe, anglais et biélorusse. La langue est sélectionnée automatiquement, en fonction de la langue de votre système, si elle ne s'avère pas être l'une de ces trois, une fenêtre de sélection de la langue s'ouvrira simplement où vous pourrez la choisir vous-même.

Le code
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" )


image

Après avoir déterminé la langue dans laquelle vous allez continuer à travailler, une fenêtre s'ouvre avec un choix de clé.

image

Une fois que vous avez décidé ce que vous voulez faire en sélectionnant la clé, passez à la sélection du fichier / répertoire avec lequel vous allez le faire.

image

Après avoir terminé le travail, le programme vous informera de ce qui s'est passé et vous demandera de bien vouloir continuer.

image

En prime, nous avons ajouté à notre programme la possibilité de modifier les droits d'accès des fichiers / répertoires, c'était notre tâche précédente, il a donc été décidé de les combiner.

Le code

#!/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


Un lien vers tous nos travaux , pour une connaissance détaillée de celui-ci, est joint.

All Articles