Programa para cambiar los derechos de acceso y el registro de nombres de archivo / directorio en Bash

Como parte de los ejercicios de laboratorio, necesitábamos escribir un guión que, al ingresar la clave apropiada, tuviera que cambiar el caso de las letras en el nombre del archivo / directorio de arriba a abajo y viceversa, cambiar el caso de la primera letra de cada palabra en el nombre a arriba, con teclas separadas, que no debe ejecutarse de forma independiente, realice las mismas conversiones, pero con la salida de información al terminal y realice cambios de registro de forma recursiva.

Con los pasos del profesor, nuestro guión ha adquirido características adicionales. Entonces, en nuestro script, verifica la presencia de caracteres prohibidos en los nombres de los archivos y el alfabeto cirílico, primero apareció una verificación de permisos de escritura (decidimos limitarnos a los archivos con permisos de escritura):

El código
if [[ -w \"$n\" ]]; then
if [[ "$adress" != *[--]* ]] && [[ "$adress" != *[\"\`\'\:\?\<\>\|\!]* ]]; then

Después de agregar varios controles y proporcionar varios tipos de errores, surgió la pregunta: ¿qué sucederá si el sistema no puede reproducir el idioma ruso? La pregunta era el lugar para estar, porque Toda la información emitida por el usuario fue escrita en ruso. Por un tiempo ignoramos esta pregunta, el maestro no la recordaba, está bien, pero rehicimos nuestro guión y creamos una interfaz gráfica para él usando Zenity.
Por conveniencia, dividimos el script en varios archivos, en el archivo inicial establecemos las variables, que luego se pasan, y verificamos Zenity.

El código
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


Habiendo hecho una interfaz completamente gráfica, volvimos a la cuestión del lenguaje. Se limitaron a tres idiomas: ruso, inglés y bielorruso. El idioma se selecciona automáticamente, dependiendo del idioma de su sistema, si no resulta ser uno de estos tres, entonces se abrirá una ventana de selección de idioma donde puede elegirlo usted mismo.

El código
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" )


imagen

Después de determinar el idioma en el que continuará trabajando, se abre una ventana con una selección de teclas.

imagen

Una vez que haya decidido lo que quiere hacer seleccionando la clave, proceda a la selección del archivo / directorio con el que lo hará.

imagen

Después de completar el trabajo, el programa le informará de lo que sucedió y le preguntará amablemente si desea continuar.

imagen

Como beneficio adicional, agregamos a nuestro programa la capacidad de cambiar los derechos de acceso de los archivos / directorios, esta era nuestra tarea anterior, por lo tanto, se decidió combinarlos.

El código

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


Se adjunta un enlace a todo nuestro trabajo , para conocerlo en detalle.

All Articles