Programm zum Ändern von Zugriffsrechten und zum Registrieren von Datei- / Verzeichnisnamen auf Bash

Als Teil der Aufgabe im Labor mussten wir ein Skript schreiben, das bei der Eingabe des entsprechenden Schlüssels die Groß- und Kleinschreibung der Buchstaben im Datei- / Verzeichnisnamen von oben nach unten und umgekehrt ändern musste, die Groß- und Kleinschreibung des ersten Buchstabens jedes Wortes im Namen nach oben ändern musste, mit separaten Schlüsseln. die nicht unabhängig ausgeführt werden sollen, machen die gleichen Konvertierungen, sondern mit der Ausgabe von Informationen an das Terminal und führen rekursiv Registeränderungen durch.

Mit den Schritten des Lehrers hat unser Skript zusätzliche Funktionen erhalten. In unserem Skript wurde zunächst überprüft, ob die Dateinamen und das kyrillische Alphabet verbotene Zeichen enthalten, und es wurde eine Überprüfung der Schreibberechtigungen durchgeführt (wir haben uns entschlossen, uns auf Dateien mit Schreibberechtigungen zu beschränken):

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

Nach dem Hinzufügen verschiedener Überprüfungen und dem Bereitstellen verschiedener Arten von Fehlern stellte sich die Frage, was passieren wird, wenn das System die russische Sprache nicht reproduzieren kann. Die Frage war der Ort zu sein, weil Alle vom Benutzer ausgegebenen Informationen wurden in russischer Sprache verfasst. Für eine Weile haben wir diese Frage ignoriert, der Lehrer hat sich nicht daran erinnert, okay, aber wir haben unser Skript überarbeitet und mit Zenity eine grafische Oberfläche dafür erstellt.
Der Einfachheit halber teilen wir das Skript in mehrere Dateien auf, legen in der Anfangsdatei die Variablen fest, die dann weitergegeben werden, und prüfen, ob Zenity vorhanden ist.

Der 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


Nachdem wir eine vollständig grafische Oberfläche erstellt hatten, kehrten wir zur Frage der Sprache zurück. Sie beschränkten sich auf drei Sprachen: Russisch, Englisch und Weißrussisch. Die Sprache wird abhängig von Ihrer Systemsprache automatisch ausgewählt. Wenn sich herausstellt, dass es sich nicht um eine dieser drei Sprachen handelt, wird einfach ein Sprachauswahlfenster geöffnet, in dem Sie sie selbst auswählen können.

Der 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" )


Bild

Nachdem Sie die Sprache festgelegt haben, in der Sie weiterarbeiten möchten, wird ein Fenster mit einer Auswahl an Schlüsseln geöffnet.

Bild

Wenn Sie durch Auswahl des Schlüssels entschieden haben, was Sie tun möchten, fahren Sie mit der Auswahl der Datei / des Verzeichnisses fort, mit der Sie dies tun möchten.

Bild

Nach Abschluss der Arbeiten informiert Sie das Programm über die Ereignisse und fragt Sie, ob Sie fortfahren möchten.

Bild

Als Bonus haben wir unserem Programm die Möglichkeit hinzugefügt, die Zugriffsrechte von Dateien / Verzeichnissen zu ändern. Dies war unsere vorherige Aufgabe, daher wurde beschlossen, sie zu kombinieren.

Der 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


Ein Link zu all unseren Arbeiten , um sie detailliert kennenzulernen, ist beigefügt.

All Articles