5. kviz
Link: ucilnica.fri.uni-lj.si
1. Bash is bad for math¶
Aritmetika
Kako lahko še napišemo izraz i=$(expr $i + 10)
na drugačen način, brez uporabe ukaza expr?
2. Parse name from string¶
Spremenljivke (odstranitev podniza)
- najkrajše ujemanje
${niz#podniz}
- najdaljše ujemanje
${niz##podniz}
- najkrajše ujemanje z zadnje strani
${niz%podniz}
- najdaljše ujemanje z zadnje strani
${niz%%podniz}
Imamo spremenljivko $x
, ki vsebuje nek niz oblike ime,priimek,datum rojstva,ulica,kraj
.
V spremenljivki so vsakič shranjeni podatki o drugi osebi.
Kako bi z uporabo odstranitve ujemanja podniza izpisali samo ime?
Rešitve z ukazom cut
ali kakšnimi drugimi ukazi ne bodo sprejete.
[aljazs@aljaxus-desktop-arch ~]$ x="ime,priimek,datum rojstva,ulica,kraj"
[aljazs@aljaxus-desktop-arch ~]$ echo ${x%%,*}
ime
[aljazs@aljaxus-desktop-arch ~]$ x="Aljaz,Starc,datum rojstva,ulica,kraj"
[aljazs@aljaxus-desktop-arch ~]$ echo ${x%%,*}
Aljaz
[aljazs@aljaxus-desktop-arch ~]$ x="Nikolaj Tilen,Tilnov,25.03.2022,ulica,kraj"
[aljazs@aljaxus-desktop-arch ~]$ echo ${x%%,*}
Nikolaj Tilen
[aljazs@aljaxus-desktop-arch ~]$
3. Infinite loop¶
Kako vse bi lahko implementirali neskončno zanko v Bashu? Izberite izmed ponujenih primerov.
Vrstica | Odgovor |
---|---|
while 1; do |
❌ ne drzi |
while [ 1 -ne 0 ]; do |
✅ drzi |
while false; do |
❌ ne drzi |
while :; do |
✅ drzi |
while true; do |
✅ drzi |
[aljazs@aljaxus-desktop-arch ~]$ while 1; do date; done
bash: 1: command not found
[aljazs@aljaxus-desktop-arch ~]$
[aljazs@aljaxus-desktop-arch ~]$ while [ 1 -ne 0 ]; do date; done
Fri Mar 25 21:18:04 CET 2022
Fri Mar 25 21:18:04 CET 2022
... truncated ...
Fri Mar 25 21:18:04 CET 2022
Fri Mar 25 21:18:04 CET 2022
^C
[aljazs@aljaxus-desktop-arch ~]$
[aljazs@aljaxus-desktop-arch ~]$ while :; do date; done
Fri Mar 25 21:23:56 CET 2022
Fri Mar 25 21:23:56 CET 2022
... truncated ...
Fri Mar 25 21:23:56 CET 2022
Fri Mar 25 21:23:56 CET 2022
^C
[aljazs@aljaxus-desktop-arch ~]$
[aljazs@aljaxus-desktop-arch ~]$ while true; do date; done
Fri Mar 25 21:24:30 CET 2022
Fri Mar 25 21:24:30 CET 2022
... truncated ...
Fri Mar 25 21:24:30 CET 2022
Fri Mar 25 21:24:30 CET 2022
^C
[aljazs@aljaxus-desktop-arch ~]$
4. Ukaz [ -f "$3" ];¶
Kaj naredi ukaz [ -f "$3" ];
znotraj skripte?
Vrstica | Odgovor |
---|---|
Preveri pogoj ali je tretji argument klica skripte imenik. | ❌ ne drzi |
Preveri pogoj, ali je datoteka, ki jo poda tretji argument klica skripte, obstaja in je navadna datoteka. | ✅ drzi |
Nastavi vrednost spremenljivke $3 na vrednost false. | ❌ ne drzi |
Preveri pogoj, ali datoteka, ki jo poda tretji argument klica skripte, obstaja (ne glede na tip datoteke). | ❌ ne drzi |
[aljazs@aljaxus-desktop-arch ~]$ ls -l
total 52
... truncated ...
-rw-r--r-- 1 aljazs aljazs 689 Jan 28 22:32 problemi-resitve.txt
-rw-r--r-- 1 aljazs aljazs 51 Mar 25 21:35 skripta.sh
[aljazs@aljaxus-desktop-arch ~]$ cat skripta.sh
#!/bin/bash
[ -f "$3" ] && echo ok || echo false
[aljazs@aljaxus-desktop-arch ~]$ # test regularne datoteke ki obstaja
[aljazs@aljaxus-desktop-arch ~]$ bash skripta.sh arg1 arg2 problemi-resitve.txt
ok
[aljazs@aljaxus-desktop-arch ~]$ # test regularne datoteke ki ne obstaja
[aljazs@aljaxus-desktop-arch ~]$ bash skripta.sh arg1 arg2 problemi-resitve.txt.neobstaja
false
[aljazs@aljaxus-desktop-arch ~]$ # test directory-ja
[aljazs@aljaxus-desktop-arch ~]$ bash skripta.sh arg1 arg2 gitrepos
false
[aljazs@aljaxus-desktop-arch ~]$
5. Menjava znakov v stringu¶
Kako bi v spremenljivki $x
, ki vsebuje nek niz zamenjali vse pojavitve črke e
s črko o
?
Obstaja tudi ukaz tr
, ki je prisoten v (skoraj) vseh distribucijah. Se moras ze res potruditi da najdes kaksno ki ga nima built-in (celo busybox ga ima).
[aljazs@aljaxus-desktop-arch ~]$ x="niz x s vsaj eno crko e"
[aljazs@aljaxus-desktop-arch ~]$ echo $x
niz x s vsaj eno crko e
[aljazs@aljaxus-desktop-arch ~]$ echo $x | tr e o
niz x s vsaj ono crko o
[aljazs@aljaxus-desktop-arch ~]$
[aljazs@aljaxus-desktop-arch ~]$ # In ce zelimo to novo vrednost zapisati v spremenljivko x
[aljazs@aljaxus-desktop-arch ~]$ x=$(echo $x | tr e o)
[aljazs@aljaxus-desktop-arch ~]$ echo $x
niz x s vsaj ono crko o
[aljazs@aljaxus-desktop-arch ~]$