Tomek
13 Kwiecień 2021 19:44
1
Jeśli ktoś programuje lub pisze jakieś ciekawe skrypty i chciałby się pochwalić swoim dziełem, to tu jest właściwe miejsce.
Na początek ja
Quoter to prosty skrypcik losujący cytat (aczkolwiek troszkę bardziej rozbudowany niż tylko proste losowanie z zadanej bazy). Ma zarówno wersję konsolową jak i graficzną (z wykorzystaniem kdialog). Jako bonus dorobiłem jeszcze przechwytywanie komunikatów dla błędnie wpisanych komend – działa to na tej samej zasadzie co być może znany niektórym bash-insulter – tylko z tą różnicą, że zamiast obrażać, drukuje losowy cytat. Jeśli ktoś jest zainteresowany, to zapraszam do testów i modyfikacji:
PS. Jak macie pomysły co by tu jeszcze dodać lub poprawić to śmiało, piszcie
1 polubienie
Bardzo prosty skrypcik podający podstawowe informacje o systemie.
myfetch.sh
#!/bin/bash
clear
yellow='\e[1;33m'
red='\e[1;31m'
blinkRed='\e[05;31m'
white='\e[1;37m'
zielony='\e[1;32m'
# PRZYTNIJ WSZYSTKIE SPACJE Z CIĄGÓW I OBCINAJ SPACJE #
function trim_all() {
# Usage: trim_all " example string "
set -f
set -- $*
printf '%s\n' "$*"
set +f
}
function system() {
sys_info=$(inxi -S);
system_op=${sys_info#*Distro:};
system_op=${system_op:1:7};
if [ $(trim_all "$system_op") == "Manjaro" ]; then
system="Manjaro";
fi
if [ $(trim_all "$system_op") == "Ubuntu" ]; then
system="Ubuntu";
fi
}
# Sytemyetemie operacyjny
function system_info() {
system;
sys_info=$(inxi -S);
system_op=${sys_info#*Distro:};
if [ $system == "Manjaro" ]; then
sys_info=$(lsb_release -a);
versja=${sys_info#*Release:};
versja=${versja:1:7};
sys_info=$(lsb_release -a);
nazwa=${sys_info#*Codename:};
else
versja="";
nazwa="";
fi
echo -ne "$system_op $versja $nazwa";
}
# Środowisko graficzne
function xwindows() {
sys_info=$(inxi -S);
ixy=${sys_info#*Desktop:};
ixy=${ixy:1:17};
echo -ne "$ixy";
}
# CPU - procesor
function cpu() {
# Polecenie podające pełną informacje o systemie operacyjnym
sys_info=$(inxi -C);
word="b";
# Ustalenie pozycji (indexu) (word)
pozycja=$(expr index "$sys_info" "$word");
# Wycięcie ciągu począwszy od litery (word - 2 znaki)
cpu=${sys_info:1:pozycja - 2};
sys_info=$(inxi -C);
speed=${sys_info#*Speed:};
speed=${speed:1:31};
echo -ne "C$cpu $speed";
}
# GPU - katra graficzna
function gpu() {
gpu=$(inxi -Gy 1 | grep "Device-1:" | cut -f2 -d:);
echo -ne "$gpu";
}
# Rodzdzielczość ekranu
function res() {
sys_info=$(inxi -G);
res=${sys_info#*resolution:};
res=${res:1:17};
echo -ne "$res";
}
# Dyski twarde
function dysk() {
sys_info=$(inxi -d);
word="I";
pozycja=$(expr index "$sys_info" "$word")
dysk=${sys_info:1:pozycja - 4};
echo -ne "D$dysk";
}
# Swap
function swap() {
if [ -n "$(swapon --show)" ]; then
sys_info=$(inxi -j);
swap=${sys_info#*size:};
swap=${swap:1:100};
echo -ne "Size: $swap";
fi
}
# Inrerfejsy śieciowe - IP LAN i WAN
function lan_wan() {
sys_info=$(inxi -i);
lan=${sys_info#*v4:};
lan=${lan:1:16};
wan=${sys_info#*WAN IP:};
wan=${wan:1:16};
echo -ne "LAN: $lan WAN: $wan";
}
# Pamięć RAM
function ram() {
sys_info=$(inxi -m);
ram=${sys_info#*Memory:};
ram=${ram:1:50};
echo -ne "$ram";
}
# Temperatura płyty
function temp() {
sys_info=$(sensors);
temp=${sys_info#*temp1:};
temp=${temp:1:50};
echo -ne "PCI adapter $temp";
}
# Zużywana moc
function power() {
sys_info=$(sensors);
power=${sys_info#*power1:};
power=${power:1:32};
echo -ne "$power";
}
echo -e "\r"
echo -ne "${red} Dzisiaj jest: ${zielony}" $(date)
echo -e "\r"
echo -ne "${red} Czas pracy: ${zielony}" $(uptime -p)
echo -e "\r"
echo -ne "${red} Nazwa hosta (komputera):${zielony}$USER${yellow}@${zielony}${HOSTNAME:-$(hostname)}"
echo -e "\r"
echo -ne "${red} Sytem operacyjny: ${zielony}$OSTYPE" $(system_info)
echo -e "\r"
echo -ne "${red} Jądro: ${zielony}" $(uname -r)
echo -e "\r"
echo -ne "${red} Wersja powłki: ${zielony}$BASH ${BASH_VERSINFO[@]}"
echo -e "\r"
echo -ne "${red} Architektóra komputera:${zielony}$HOSTTYPE"
echo -e "\r"
echo -ne "${red} Środowisko graficzne: ${zielony}" $(xwindows)
echo -e "\r"
echo -ne "${red} CPU: ${zielony}" $(cpu)
echo -e "\r"
echo -ne "${red} GPU: ${zielony}" $(gpu)
echo -e "\r"
echo -ne "${red} Rodzdzielczość: ${zielony}" $(res)
echo -e "\r"
echo -ne "${red} Użycie dysków: ${zielony}" $(dysk)
echo -e "\r"
if [ -n "$(swapon --show)" ]; then
echo -ne "${red} Użycie swap: ${zielony}" $(swap)
echo -e "\r"
fi
echo -ne "${red} Pamięć: ${zielony}" $(ram)
echo -e "\r"
echo -ne "${red} IP adres: ${zielony}" $(lan_wan)
echo -e "\r"
echo -ne "${red} Temperatura: ${zielony}" $(temp)
echo -e "\r"
echo -ne "${red} Używana moc: ${zielony}" $(power)
echo -e "\r"
echo -ne "${red} Bierzący latalog: ${zielony}$PWD"
echo -e "\r"
echo -ne "${red} Ten sktypt: ${yellow}\"${0##*/}\" "
echo -e "\r"
echo -e "\e[m" # Resetowanie ustawień kolorów
Tomek
15 Kwiecień 2021 17:55
3
Fajny skrypcik, choć ja bym to rozwiązał trochę inaczej, na przykład info o karcie graficznej (i pozostałe informacje z inxi) wyciągnąłbym w ten sposób:
[tomek@tomek ~]$ inxi -Gy 1 | grep "Device-1:" | cut -f2 -d:
Intel 4th Gen Core Processor Integrated Graphics
Twój skrypt ucina na d w Integrated , więc niestety całej nazwy nie pokazuje. Przydałoby się też dorobić kilka warunków, żeby pomijał wyświetlanie informacji, których nie ma (albo dodawał jakąś adnotację), ja np. nie korzystam ze swapu i z twojego skryptu wyciągam taką dziwną informację:
Użycie swap: Size: wap: Alert: No Swap data was found.
Poza tym na zsh skrypt pokazuje, że korzystam z basha, należy to poprawić i zmienić
$BASH ${BASH_VERSINFO[@]}
na
$($SHELL --version)
Gdybyś to uwzględnił skrypt byłby znacznie bardziej uniwersalny
Dzięki za sugestie, z pewnością je uwzględnię. Programuję w bash-u stosunkowo od nie dawna i ciągle się uczę.
Poprawki wprowadzone
Tomek
16 Kwiecień 2021 18:00
5
To ja cię zaskoczę, bo też nie mam w tym dużego doświadczenia Quoter to chyba mój pierwszy skrypt dłuższy niż kilkanaście linijek.
Skrypt który zapisuje do pliku listę aplikacji zainstalowanych w systemie i opcjonalnie instaluje aplikacje z utworzone listy, na przykład na innym kompie z Manjaro
lista_aplikacji.sh
#!/bin/bash
# USTAWIENIA KOLORÓW #
yellow='\e[1;33m' ## żółty
red='\e[1;31m' ## czerwony
blinkRed='\e[05;31m' ## migający czerwony
white='\e[1;37m' ## biały
zielony='\e[1;32m' ## zielony
# Funkcja, w której parsowane są argumenty
function aparse(){
while [ ! -z $1 ]
do
case "$1" in
-h|--help) HELPTEXT=$(cat "$0" | grep "^\s*## " | sed 's/^\s*## / /')
echo -e "${HELPTEXT}"
exit 0
;;
esac
shift
done
}
aparse $@
# Co robi skrypt i jaka jest składnia
## lista_alikacji.sh -h lub --help | Wyświetla pomoc jak użyć skryptu
## lista_alikacji.sh dowolna_nazwa_pliku np: lista.txt | Tworzy listę aplikacji
## lista_alikacji.sh dowolna_nazwa_pliku dowolny_argument np: lista.txt instaluj | Instaluje aplikacje z utwofrzonej listy
function wyjdz() {
cd /tmp
echo -ne "${zielony}Zakończenie skryptu\e[3m${yellow} \"${0##*/}\" ${white}\e[m";
echo -e "\n"
echo -ne "\e[5m \e[3m \e[2m ${red} <-<-<- Bye Bye ->->-> \n${white} \e[m";
echo -e "\n"
exit $?;
}
lista_plikow=$1;
install=$2;
if [ $# -gt 2 ]; then
echo -e "\n"
echo -e "${red} Za dużo argumentow!"
echo -e "\n"
wyjdz;
fi
if [ $# == 1 ]; then
echo "# ************* Lista aplikacji z repozytorum oficjalnego ************* #" > $lista_plikow && pacman -Qqe >> $lista_plikow && echo "# ************* Lista aplikacji z AUR ************* #" >> $lista_plikow && pacman -Qqm >> $lista_plikow
echo -e "${red} Lista programów z systemu ${yellow} \"Manjaro\" ${red} zotała utworzona !! \n${white}"
fi
if [ $# == 2 ]; then
echo -e "${red} Trwa instalacja programów w systemie ${yellow} \"Manjaro\" ${red} !! \n${white}"
yay -S --needed $(comm -12 <(yay -Slq | sort) <(sort "$lista_plikow"))
fi
wyjdz;
Tomek
26 Grudzień 2021 13:25
7
Napisany w jeden dzień prosty manager haseł cli, który korzysta z Age . Robi, co trzeba. A że kopiowanie działa tylko pod KDE i Waylandem to inna sprawa. Leniwy jestem i nie chciało mi się szukać, z czego korzystają inne DE Ale dla chcącego nic trudnego, wystarczy podmienić na preferowane narzędzia w funkcji copy
i powinno działać też i u was. Zależności (pomijając powyższe) to tylko i aż age
oraz tree
, reszta powinna być każdym systemie.
napcok
27 Grudzień 2021 10:05
8
Ładnie się nazywa
Jakby komuś chciało się w tym grzebać to standardowym narzędziem do pracy ze schowkiem w X11 jest xclip.
1 polubienie
Prosty skrypt do tworzenia, usuwania i zmiany rozmiary pliku “swap” w dowolnej lokalizacji.
! Wymagana instalacja yad
xmksawp.sh
#! /bin/sh
# USTAWIENIA KOLORÓW #
yellow='\e[1;33m' ## żółty
red='\e[1;31m' ## czerwony
blinkRed='\e[05;31m' ## migający czerwony
white='\e[1;37m' ## biały
zielony='\e[1;32m' ## zielony
# Funkcja, w której parsowane są argumenty
function aparse(){
while [ ! -z $1 ]
do
case "$1" in
-h|--help) HELPTEXT=$(cat "$0" | grep "^\s*## " | sed 's/^\s*## / /')
echo -e "${HELPTEXT}"
exit 0
;;
esac
shift
done
}
aparse $@
# Co robi skrypt i jaka jest składnia
## ymkswap.sh -h lub --help | Wyświetla pomoc jak użyć skryptu
## Wymagana instalacja | yad
function wyjdz() {
cd /tmp
echo -ne "${zielony}Zakończenie skryptu\e[3m${yellow} \"${0##*/}\" ${white}\e[m";
echo -e "\n"
echo -ne "\e[5m \e[3m \e[2m ${red} <-<-<- Bye Bye ->->-> \n${white} \e[m";
echo -e "\n"
exit $?;
}
windowicon="file-manager-red";
image="file-manager";
okbutton="Ok"'!dialog-ok!Wykonaj:0';
nobutton="Zakończ"'!dialog-cancel!Zamknij:1';
title="Tworzenie pliku swap";
text="Proszę podać wymagane parametry (*) - pola wymagane.";
function mk_swap {
# SEKCJA ZBIERANIA DANYCH #
swap=$(yad --title="$title" --text="$text" --window-icon="$windowicon" --image="$image" --separator=" " --center --button="$okbutton" \
--button="$nobutton" --width=500 --fixed --tabnum=1 --form --field=$"Wybierz nazwę i lokalizacje pliku:(*):SFL" '/swapfile' \
--field=$"Podaj rozmiar pliku w GB:(*):NUM" '8' --field=$"Automatycznie dodać wpis do \"/etc/fstab\" ?:chk" 'no' \
--field=$"Zmienić rozmiar pliku swap ?:chk" 'no' --field=$"Usunąć plik swap ?:chk" 'no' \
--field=$"Edytuj kod źródłowy:chk" 'no')
if [ $? == 1 ]; then
yad --width=450 --title="Informacja" --image="dialog-information" --center --window-icon="dialog-information" \
--text='<span color=\"red\" font=\"Comic Sans bold 11\">Wciśnij \"Zakończ\", aby zakończyć lub \"Wróć\", aby powrócić do programu.</span>' \
--button="Zakończ"!dialog-cancel!Zakończ program:0 --button="Wróć"!dialog-ok!Powróć do programu:1
if [ $? == 1 ]; then
clear
mk_swap;
fi
clear
wyjdz;
fi
## declare -a pola=($swap) | Utworzenie tablicy z wybranych pól
declare -a pola=($swap);
## declare -i rozmiar=${#pola[@]} | Obliczenie rozmiaru tablicy
declare -i rozmiar=${#pola[@]};
## "$rozmiar -lt 6" | Wygenerowanie błędu w przypadku nie wypełnienia wymaganych pól (*)
if [[ $rozmiar -lt 6 || "$film" == "TRUE" && "$del" == "TRUE" && "$resize" == "TRUE" && "$fstab" == "TRUE" ]]; then
yad --width=450 --title="Informacja" --image="dialog-information" --center --window-icon="dialog-information" \
--text='<span color=\"red\" font=\"Comic Sans bold 11\">Błąd wypełnienia formularza.</span>' \
--button="Ok"!dialog-ok!Wykonaj:0
clear
mk_swap;
fi
# Pobranie danych z tablicy
swapfile=${pola[0]};
rozmiar=${pola[1]};
fstab=${pola[2]};
resize=${pola[3]};
del=${pola[4]};
kod=${pola[5]};
# SEKCJA WYKONYWANIA POLECEŃ #
if [ "$kod" == "TRUE" ]; then
geany xmkswap.sh
clear
mk_swap;
fi
if [ "$del" == "TRUE" ]; then
sudo swapoff $swapfile;
sudo rm $swapfile;
yad --width=450 --title="Informacja" --image="dialog-information" --center --window-icon="dialog-information" \
--text='<span color=\"red\" font="Comic Sans bold 11">Plik swap w lokalizacji '$swapfile' został usunięty.</span>' \
--button="Ok"!dialog-ok!Wykonaj:0
clear
mk_swap;
fi
if [ "$resize" == "TRUE" ]; then
sudo swapoff $swapfile;
sudo rm $swapfile;
fi
if [[ -n "$swapfile" && -n "$rozmiar" || "$resize" == "TRUE" ]]; then
## "sudo fallocate -v -l "$rozmiar"G $swapfile" | Tworzenie pliku (G - gigabytes)
sudo fallocate -v -l "$rozmiar"G $swapfile;
## "sudo chmod 600 $swapfile" | Nadanie uprawnienia odczytu i zapisu wyłącznie dla roota
sudo chmod 600 $swapfile;
## "sudo mkswap $swapfile" | Przygotowanie pliku
sudo mkswap $swapfile;
## "sudo swapon $swapfile" | Aktywowanie swap-u
sudo swapon $swapfile;
## "sudo swapon -a" | Włączenie wszystkich obszarów wymiany
sudo swapon -a
## "sudo swapon -s" | Sprawdzenie czy plik został poprawnie utworzony
sudo swapon -s
if [ "$resize" == "TRUE" ]; then
yad --width=450 --title="Informacja" --image="dialog-information" --center --window-icon="dialog-information" \
--text='<span color=\"green\" font="Comic Sans bold 11">Rozmiar pliku swap w lokalizacji '$swapfile' został zmieniony na '$rozmiar'GB.</span>' \
--button="Ok"!dialog-ok!Wykonaj:0
mk_swap;
fi
if [ "$fstab" == "TRUE" ]; then
## "echo \"$swapfile\" none swap defaults 0 0" | Dodanie wpisu do fstab (aktywowanie pliku wymiany na stałę)
sudo bash -c "echo \"$swapfile\" none swap defaults 0 0 >> /etc/fstab"
fi
ls -lh $swapfile
sudo swapon --show
fi
## " -n "$swapfile" ..." | Wygenerowanie komunikatu o zakończeniu programu
if [[ -n "$swapfile" && -n "$rozmiar" ]]; then
yad --width=450 --fixed --title="Informacja" --image="dialog-information" --center --window-icon="dialog-information" \
--text='<span color=\"green\" font="Verdana bold 11">Plik swap w lokalizacji '$swapfile' o rozmiarze '$rozmiar'GB został utworzony i aktywowany.</span>' \
--button="Ok"!dialog-ok!Wykonaj:0
#clear
mk_swap;
fi
}
mk_swap;
Tomek
27 Grudzień 2021 12:23
10
Skoro wszędzie dajesz yad to możnaby również dać zensu , powinno być domyślnie w Manjaro (albo samemu to ogarnąć w yad), żeby pytał o hasło w GUI
napcok
27 Grudzień 2021 12:27
11
yadsu - przeróbka zensu używana w Maboxie…
#!/bin/sh
case $LANG in
pl*)
TITLE="Uwierzytelnianie"
TEXT=" Wymagana jest Autentykacja \n dla użytkownika: <b>$USER</b>"
PASS=" Hasło: "
WRONG=" Błędne hasło, spróbuj ponownie "
OK="--button=Uwierzytelnij:0"
CANCEL="--button=Anuluj:1"
;;
es*)
TITLE="Autenticación"
TEXT="Se requiere autenticación \n para el usuario: <b>$USER</b>"
PASS=" Contraseña: "
WRONG=" Contraseña incorrecta, inténtelo de nuevo"
OK="--button=Autenticar:0"
CANCEL="--button=Cancelar:1"
;;
*)
TITLE="Authentication"
TEXT=" Authentication needed for user: <b>$USER</b>"
PASS=" Password: "
WRONG=" Wrong password, retry "
OK="--button=Authenticate:0"
CANCEL="--button=Cancel:1"
;;
esac
PASSWD="$(yad --entry --entry-label "$PASS" --hide-text --image=dialog-password --window-icon=distributor-logo-mabox --width=360 --text="$TEXT" --title="$TITLE" --center $CANCEL $OK)"
if [ "$dialog_pressed_label" = 'cancel' ]; then
echo "triggered cancel"
exit
elif [ -z "$PASSWD" ]; then
echo "triggered empty"
exit
else
echo triggered PW
echo "$PASSWD" | sudo -S "$@"
fi
if [ $? = 1 ]; then
PASSWD="$(yad --entry --entry-label "$PASS" --hide-text --image=dialog-error --window-icon=distributor-logo-mabox --width=360 --text="$WRONG" --title="$TITLE" --center $CANCEL $OK)"
echo "$PASSWD" | sudo -S "$@"
fi
1 polubienie
Tomek
30 Grudzień 2021 19:40
12
Mała aktualizacja, teraz kopiowanie powinno działać wszędzie, zarówno na Xorg jak i na Wayland. Jeśli chodzi o czyszczenie schowka to teroretycznie też, ale nie wiem na pewno. Obie te rzeczy na pewno bezbłędnie działają na KDE. Plus parę dodatkowych opcji, jak jesteście ciekawi, to po prostu spróbujcie lub zajrzyjcie w kod Wszelkie dodatkowe pomysły na rozszerzenie funkcjonalności mile widziane
prostota przede wszystkim:
#!/bin/sh
(
/usr/bin/ntpdate vega.cbk.poznan.pl \
zegar.umk.pl \
ntp.nask.pl \
time.atman.pl \
ntp.task.gda.pl \
/usr/bin/hwclock --systohc
) >/dev/null
siedzi sobie w /usr/local/bin/
jako ntp.sh
i odpalany jako root
w /etc/crontab
*/14 * * * * root /usr/local/bin/ntp.sh
spokój z synchronizacją czasu…
Skrypt do klonowania “softu”.
klonuj.sh
#!/bin/bash
# USTAWIENIA KOLORÓW #
yellow='\e[1;33m' ## żółty
red='\e[1;31m' ## czerwony
blinkRed='\e[05;31m' ## migający czerwony
white='\e[1;37m' ## biały
zielony='\e[1;32m' ## zielony
# Funkcja, w której parsowane są argumenty
function aparse(){
while [ ! -z $1 ]
do
case "$1" in
-h|--help) HELPTEXT=$(cat "$0" | grep "^\s*## " | sed 's/^\s*## / /')
echo -e "${HELPTEXT}"
exit 0
;;
esac
shift
done
}
aparse $@
# Co robi skrypt i jaka jest składnia
## klonuj.sh.sh -h lub --help | Wyświetla pomoc jak użyć skryptu
## klonuj.sh.sh dowolna_nazwa_pliku np: klonuj.sh.sh lista.txt | Tworzy listę aplikacji zainstalowanych w systemie
## klonuj.sh.sh dowolna_nazwa_pliku dowolny_argument np: klonuj.sh.sh lista.txt instaluj | Instaluje aplikacje z utwofrzonej listy
function wyjdz() {
cd /tmp
echo -ne "${zielony}Zakończenie skryptu\e[3m${yellow} \"${0##*/}\" ${white}\e[m";
echo -e "\n"
echo -ne "\e[5m \e[3m \e[2m ${red} <-<-<- Bye Bye ->->-> \e[m";
echo -e "\n"
exit $?;
}
lista_aplikacji=$1;
install=$2;
if [ $# -gt 2 ]; then
echo -e "\n"
echo -e "${red} Za dużo argumentow!"
echo -e "\n"
wyjdz;
fi
if [ $# == 1 ]; then
echo "# ************* Lista aplikacji z repozytorum oficjalnego ************* #" > $lista_aplikacji && pacman -Qqe >> $lista_aplikacji
&& echo "# ************* Lista aplikacji z AUR ************* #" >> $lista_aplikacji && pacman -Qqm >> $lista_aplikacji
echo -e "${zielony} Lista aplikacji zotała utworzona !!"
fi
if [ $# == 2 ]; then
echo -e "${yellow} Trwa instalacja aplikacji w systemie \"Manjaro\" !!"
yay -S --needed $(comm -12 <(yay -Slq | sort) <(sort "$lista_aplikacji"))
fi
wyjdz;