Programa para alteração de direitos de acesso e registro de nomes de arquivos / diretórios no Bash

Como parte da tarefa no laboratório, precisávamos escrever um script que, ao inserir a chave apropriada, tivesse que mudar o caso das letras no nome do arquivo / diretório de cima para baixo e vice-versa, alterar o caso da primeira letra de cada palavra no nome para superior, com chaves separadas, que não deve ser executado de forma independente, faça as mesmas conversões, mas com a saída de informações para o terminal e execute as alterações de registro recursivamente.

Com os passos do professor, nosso script adquiriu recursos adicionais. Portanto, em nosso script, primeiro, verifica a presença de caracteres proibidos nos nomes dos arquivos e o alfabeto cirílico apareceu, uma verificação de permissões de gravação (decidimos nos limitar a arquivos com permissões de gravação):

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

Após adicionar várias verificações e prever vários tipos de erros, surgiu a pergunta: o que acontecerá se o sistema não puder reproduzir o idioma russo? A questão era o lugar para estar, porque Todas as informações emitidas pelo usuário foram escritas em russo. Por um tempo que ignoramos essa pergunta, o professor não se lembrava, tudo bem, mas refizemos nosso script e fizemos uma interface gráfica para ele usando o Zenity.
Por conveniência, dividimos o script em vários arquivos. No arquivo inicial, definimos as variáveis ​​que são repassadas e verificamos o Zenity.

O 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


Tendo feito uma interface totalmente gráfica, voltamos à questão da linguagem. Eles se limitaram a três idiomas: russo, inglês e bielorrusso. O idioma é selecionado automaticamente, dependendo do idioma do sistema, se não for um desses três, uma janela de seleção de idioma será aberta simplesmente onde você poderá escolher.

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


imagem

Após determinar o idioma em que você continuará trabalhando, uma janela é aberta com uma opção de chave.

imagem

Depois de ter decidido o que deseja fazer, selecionando a chave, prossiga para a seleção do arquivo / diretório com o qual você fará isso.

imagem

Depois de concluir o trabalho, o programa informará o que aconteceu e, por favor, perguntará se você deseja continuar.

imagem

Como bônus, adicionamos ao nosso programa a capacidade de alterar os direitos de acesso de arquivos / diretórios; essa era nossa tarefa anterior; portanto, foi decidido combiná-los.

O 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


Um link para todo o nosso trabalho , para um conhecimento detalhado, está anexado.

All Articles