Pochwal się swoim projektem/skryptem

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 :smiley:

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 :wink:

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

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 :wink:

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

To ja cię zaskoczę, bo też nie mam w tym dużego doświadczenia :slight_smile: 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;

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 :stuck_out_tongue: 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.

Ładnie się nazywa :slight_smile:
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;

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 :wink:

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

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 :stuck_out_tongue: Wszelkie dodatkowe pomysły na rozszerzenie funkcjonalności mile widziane :slight_smile:

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;