Šaunus kamandų paleidėjas ir failų chmod įrankis

Šį bash scenarijų sukūriau tam, kad leistų vartotojui lengvai pasirinkti ir paleisti iš anksto nustatytas komandas iš tekstinio failo arba vykdyti papildomus veiksmus, pvz., pakeisti failų leidimus naudojant chmod.

Veikimo principas:

  1. Pradžioje, scenarijus nuskaito komandas iš nurodyto tekstinio failo, kuris yra pasirinktas naudotojo.

  2. Vartotojui pateikiamas sąrašas galimų komandų iš tekstinio failo (pridėjau dar ir masyvą papildomai komandoms papildyti tiesiog skripte) ir jis gali pasirinkti, kurią komandą nori paleisti.

  3. Jei vartotojas pasirenka chmod +x, scenarijus rodo visus .sh failus esančius tame pačiame kataloge ir leidžia vartotojui pasirinkti, kuriam iš jų nori pritaikyti chmod +x.

  4. Pasirinkus komandą, vykdoma ji, o jei pasirinkta chmod +x, pritaikomas chmod pasirinktam failui.

Kilmės šaltiniai:

  • Scenarijus nuskaito pagrindines komandas iš tekstinio failo, kuris yra pasirinktas naudotojo.

  • Papildomas funkcionalumas, susijęs su chmod, naudoja find komandą, kad surastų .sh failus esančius tame pačiame kataloge.


#!/bin/bash
 
# Tekstinio failo su komandomis pavadinimas
commands_file="$HOME/commands.txt"
 
# Funkcija patikrinti, ar įvestis yra skaitinė
is_numeric() {
    if [[ "$1" =~ ^[0-9]+$ ]]; then
        return 0
    else
        return 1
    fi
}
 
# Komandų sąrašo nuskaitymas
commands=()
while IFS= read -r line; do
    commands+=("$line")
done < "$commands_file"
 
commands+=("ls -l" "clear")
 
# Papildomas pranešimas apie "chmod +x" komandą
echo "Papildomas funkcionalumas: jei pasirinksite 'chmod +x', bus rodomi visi .sh failai šiame kataloge."
 
# Komandų sąrašo spausdinimas
echo "Pasirinkite komandą paleisti:"
for ((i = 0; i < ${#commands[@]}; i++)); do
    echo "$((i + 1)). ${commands[$i]}"
done
 
# Pasirinkimo gavimas
while true; do
    read -p "Įveskite komandos numerį: " choice
    # Patikrinimas, ar įvestis yra skaitinė
    if is_numeric "$choice"; then
        if [[ $choice -ge 1 && $choice -le ${#commands[@]} ]]; then
            selected_command="${commands[$choice - 1]}"
            echo "Paleidžiama komanda: $selected_command"
 
            # Patikrinimas, ar pasirinkta komanda yra "chmod +x"
            if [[ "$selected_command" == "chmod +x" ]]; then
                # Surasti visus .sh failus ir juos rodyti vartotojui
                sh_files=$(find . -maxdepth 1 -type f -name "*.sh" -exec basename {} \;)
                echo "Pasirinkite failą, kuriam norite pritaikyti chmod +x:"
                select file in $sh_files; do
                    if [[ -n $file ]]; then
                        # Patikrinimas, ar pasirinktas failas yra tinkamas
                        if [[ -f "$file" ]]; then
                            chmod +x "$file"
                            echo "Failui $file pritaikyta chmod +x."
                            break
                        else
                            echo "Nerastas failas: $file"
                        fi
                    else
                        echo "Neteisingas pasirinkimas. Bandykite dar kartą."
                    fi
                done
            else
                eval "$selected_command"
            fi
            break
        else
            echo "Neteisingas pasirinkimas. Pasirinkite tinkamą komandos numerį."
        fi
    else
        echo "Neteisingas pasirinkimas. Įveskite skaitinę reikšmę."
    fi
done

Pridėjau pavyzdinį commands.txt

 


fastfetch
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
python3 -m venv $HOME/Python
source $HOME/Python/bin/activate
stat -c %w / | cut -b 1-16 #mano Debian instaliavimo data
chmod +x
free -m -l -t
curl ifconfig.me
curl geofind.me
curl api.myip.com
Šis bash scenarijus yra geras įrankis, leidžiantis vartotojui lengvai ir patogiai vykdyti įvairias komandas iš tekstinio failo ir vykdyti papildomus veiksmus, tokius kaip failų leidimų keitimas. Tai suteikia naudotojui daugiau kontrolės ir efektyviau valdo darbo procesus.

Komentarai

Populiarūs šio tinklaraščio įrašai

Configuring a NixOS firewall for everyday use

Setting up syncthing as a service on openSUSE and other Linux distributions

Monitoring SFTP server updates with Python