Program untuk mengubah hak akses dan mendaftar nama file / direktori di Bash

Sebagai bagian dari latihan laboratorium, kami perlu menulis skrip yang, ketika memasukkan kunci yang sesuai, harus mengubah huruf huruf dalam nama file / direktori dari atas ke bawah dan sebaliknya, mengubah huruf huruf pertama dari setiap kata dalam nama ke atas, dengan tombol terpisah, yang seharusnya tidak dieksekusi secara independen, melakukan konversi yang sama, tetapi dengan output informasi ke terminal dan melakukan perubahan register secara rekursif.

Dengan langkah kaki guru, skrip kami telah memperoleh fitur tambahan. Jadi, dalam skrip kami, pertama-tama, periksa keberadaan karakter terlarang dalam nama file dan alfabet Cyrillic muncul, pemeriksaan untuk izin menulis (kami memutuskan untuk membatasi diri pada file dengan izin menulis):

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

Setelah menambahkan berbagai pemeriksaan dan menyediakan berbagai jenis kesalahan, muncul pertanyaan, apa yang akan terjadi jika sistem tidak dapat mereproduksi bahasa Rusia? Pertanyaannya adalah tempatnya, karena Semua informasi yang dikeluarkan oleh pengguna ditulis dalam bahasa Rusia. Untuk sementara kami mengabaikan pertanyaan ini, guru tidak ingat tentang itu, oke, tapi kami redid script kami dan membuat antarmuka grafis untuk itu menggunakan Zenity.
Untuk kenyamanan, kami membagi skrip menjadi beberapa file, pada file awal kami mengatur variabel, yang kemudian diteruskan, dan kami memeriksa Zenity.

Kode
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


Setelah membuat antarmuka sepenuhnya grafis, kami kembali ke pertanyaan bahasa. Mereka membatasi diri pada tiga bahasa: Rusia, Inggris, dan Belarusia. Bahasa dipilih secara otomatis, tergantung pada bahasa sistem Anda, jika tidak menjadi salah satu dari ketiganya, maka jendela pemilihan bahasa akan terbuka di mana Anda dapat memilihnya sendiri.

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


gambar

Setelah menentukan bahasa di mana Anda akan terus bekerja, sebuah jendela terbuka dengan pilihan kunci.

gambar

Setelah Anda memutuskan apa yang ingin Anda lakukan dengan memilih kunci, lanjutkan ke pemilihan file / direktori yang dengannya Anda akan melakukan ini.

gambar

Setelah menyelesaikan pekerjaan, program akan memberi tahu Anda tentang apa yang terjadi dan dengan ramah akan bertanya apakah Anda ingin melanjutkan.

gambar

Sebagai bonus, kami menambahkan kemampuan untuk mengubah hak akses file / direktori pada program kami, ini adalah tugas kami sebelumnya, oleh karena itu, diputuskan untuk menggabungkannya.

Kode

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


Tautan ke semua pekerjaan kami , untuk kenalan terperinci dengannya, terlampir.

All Articles