Za otvoriti konzolu u VS Code cmd + j
Ekstenzija za shell script je .sh
Da fajlu napravimo executable
da je možemo pokrenuti u konzolu pišemo chmod +x imeSkripte.sh
chmod +x myscipt.sh
da pokrenemo skriptu pišemo ./imeSkripte.sh
./myscipt.sh
Da vidimo gdje se nalazi bash u sistemu pišemo i to ujedno pišemo u prvoj liniji skripte #!/bin/bash
which bash
Obavezno pišemo u prvoj liniji.
#!/bin/bash
Za komentiranje u bash skriptama koristimo #
znak
#inline comment
Za ispisivanje u konzolu koristimo echo
komandu
#!/bin/bash
echo Hello World
Varijable se u pravilu pišu sa VELIKIM SLOVIMA
može i s malim ali je norma da se pišu VELIKIM
Za korištenje varijable koristimo $
(dollar)
#!/bin/bash
NAME="John"
echo "My name is $NAME"
Može i ovako ali je rezultat isti
#!/bin/bash
NAME="John"
echo "My name is $NAME"
echo "My name is ${NAME}"
User input ako želimo da korisnik nešto upise da to ubacimo u varijablu i ispišemo u konzoli
#!/bin/bash
read -p "Enter your name: " NAME
echo "Hello $NAME"
if
statment
NAME="John"
#SIMPLE IF STATMENST
if [ "$NAME" == "John" ]
then
echo "Your name is John"
fi
if-else
NAME="John"
if [ "$NAME" == "Johhn" ]; then
echo "Your name is John"
else
echo "Your name is not John"
fi
else if (elif)
NAME="John"
if [ "$NAME" == "Jack" ]; then
echo "Your name is Jack"
elif [ "$NAME" == "John" ]; then
echo "Your name is John"
else
echo "Your name is not John"
fi
Uspoređivanje
# val1 -eq val2 Returns true if the values are equal
# val1 -ne val2 Returns true if the values are not equal
# val1 -gt val2 Returns true if val1 is greater than val2
# val1 -ge val2 Returns true if val1 is greater than or equal to val2
# val1 -lt val2 Returns true if val1 is less than val2
# val1 -le val2 Returns true if val1 is less than or equal to val2
NUM1=3
NUM2=5
if [ "$NUM1" -gt "$NUM2" ]; then
echo "$NUM1 is greather then $NUM2"
else
echo "$NUM1 is less then $NUM2"
fi
Stanje file FILE CONDITIONS
# -d file True if the file is a directory
# -e file True if the file exists (note that this is not particularly portable, thus -f is generally used)
# -f file True if the provided string is a file
# -g file True if the group id is set on a file
# -r file True if the file is readable
# -s file True if the file has a non-zero size
# -u True if the user id is set on a file
# -w True if the file is writable
# -x True if the file is an executable
U ovom slučaju smo uspoređivali dali je test.txt
fajla u ovom slučaju je još nismo stvorili pa vraćatest.txt is not a file
FILE="test.txt"
if [ -f "$FILE" ]; then
echo "$FILE is a file"
else
echo "$FILE is not a file"
fi
ako je stvorimo
Ako stavimo provjeru dali postoji is exists
sa -e
onda ce davati da postoji nema veze što je to folder
FILE="test.txt"
if [ -e "$FILE" ]; then
echo "$FILE is exists"
else
echo "$FILE is NOT a exists"
fi
Case statement
tražmo od korisnika da upise dali je stariji ili nije od 21
Sa case
počima sintaksa a sa esac
završava kontra od case
read -p "Are you 21 or over? Y/N " ANSWER
case "$ANSWER" in
[yY] | [yY][eE][sS])
echo "You can have a beer :)"
;;
[nN] | [nN][oO])
echo "Sorry, no drinking"
;;
*)
echo "Please enter y/yes or n/no"
;;
esac
for loop
NAMES="Brad Kevin Alice Mark"
for NAME in $NAMES
Ovaj prvi NAME nema $ dollar znak jer tu definiramo varijablu a vučemo zapis iz $NAMES
varijable.
NAMES="Brad Kevin Alice Mark"
for NAME in $NAME; do
echo "Hello $NAME"
done
for loop
za preimenovanje fajla .
Preimenovanje radimo sa mv comandom
U 1. liji smo izabrali sve fajle sa .txt ekstenzijom i stavili ih u varijablu FILES
U 2. liniji smo definirali varijablu NEW
sa kojem zapisom da preimenujemo fajle.
U 3. smo provukli kroz for
petlju.
U 4 liniji ispisujemo u konzoli rezultate
U 5 komandom mv
smo rekli da preimenuje file tj. preuzme stari naziv i nadoda novi.
FILES=$(ls *.txt)
NEW="new"
for FILE in $FILES; do
echo "Renaming $FILE to new-$FILE"
mv $FILE $NEW-$FILE
done
while loop
U new-1.txt dodamo tekst
U 1. liniji postavimo varijablu LINE=1 da čita od prvog reda
U 2. liniji sa while
loopom kreiramo varijablu CURRENT_LINE
i dajemo joj naredu da ćita read
Opcija -r proslijeđena naredbi za čitanje sprječava tumačenje izlaza obrnute kose crte.
U 3. liniji ispisujemo u konzoli tekst.
U 4. liniji povećavamo LINE
za 1
U 5 liniji stavljamo done
za završetak loopa i nakon toga dodajemo fajlu koju ćemo ispisivati.
LINE=1
while read -r CURRENT_LINE; do
echo "$LINE: $CURRENT_LINE"
((LINE++))
done <"./new-1.txt"
Primjer bez -r
LINE=1
while read CURRENT_LINE; do
echo "$LINE: $CURRENT_LINE"
((LINE++))
done <"./new-1.txt"
Funkcije function
Funkcije u bashu su kao i u ostalim jezicima
function sayHello() {
echo "Hello World"
}
sayHello
Funkcije sa parametrima
Dodajemo parametre sa $1 $2
i tako dalje a vrijednosti upisujemo kad pozivamo funkciju.
function greet() {
echo "Hello, I am $1 and I am $2"
}
greet "Brad" "36"
Okidanje bash komandi ili nizanje komandi da odradi jednu za drugom, pravilo je da se samo pišu jedna ispod druge i oni će se okidati s tim redoslijedom.
Kreiranje foldera i tekst fajle u njemu
U 1. liniji smo kreirali folder hello
U 2. liniji smo kreirali tekstualnu fajlu
U 3. liniji smo dodali tekst u fajlu
U 4. liniji smo prikazali u konzoli
mkdir hello
touch "hello/world.txt"
echo "Hello World" >>"hello/world.txt"
echo "Created hello/world.txt"