$@ - хранит разделенную строку аргументов переданных скрипту
$# - хранит количество переданных аргументов
#!/bin/bash
args=("$@")
echo ${args[0]} ${args[1]}
echo $#
$ ./script.sh test arguments
test arguments
2
# задание
my_array=(apple banana "Fruit Basket" orange)
# переопределение элемента
my_array[4]="carrot"
# количество элементов в массиве
echo ${#my_array[@]}
# доступ к последнему элементу
echo ${my_array[${#my_array[@]}-1]}
A=3
B=$((100 * $A + 5))
echo $B # 305
# длинна строки
STRING="test"
echo ${#STRING} # 4
# вырезка подстроки
POS=1
LEN=3
echo ${STRING:$POS:$LEN}
# замена подстроки
STRING="to be or not to be"
echo ${STRING[@]/be/eat} # to eat or not to be
STRING="to be or not to be"
echo ${STRING[@]//be/eat} # to eat or not to eat
# удаление куска
STRING="to be or not to be"
echo ${STRING[@]// not/} # to be or to be
# замена с начала
STRING="to be or not to be"
echo ${STRING[@]/#to be/eat now} # eat now or not to be
# замена с конца
STRING="to be or not to be"
echo ${STRING[@]/%be/eat} # to be or not to eat
NAME="George"
if [ "$NAME" = "John" ]; then
echo "John Lennon"
elif [ "$NAME" = "George" ]; then
echo "George Harrison"
else
echo "This leaves us with Paul and Ringo"
fi
При этом в [] могут быть числовые сравнения
comparison Evaluated to true when
$a -lt $b $a < $b
$a -gt $b $a > $b
$a -le $b $a <= $b
$a -ge $b $a >= $b
$a -eq $b $a is equal to $b
$a -ne $b $a is not equal to $b
и строковые сравнения
comparison Evaluated to true when
"$a" = "$b" $a is the same as $b
"$a" == "$b" $a is the same as $b
"$a" != "$b" $a is different from $b
-z "$a" $a is empty
при этом пробел до после = необходим, и для избегания оценки выражений переменные надо заключать в кавычки
mycase=1
case $mycase in
1) echo "You selected bash";;
2) echo "You selected perl";;
3) echo "You selected phyton";;
4) echo "You selected c++";;
5) exit
esac
# for
NAMES=(Joe Jenny Sara Tony)
for N in ${NAMES[@]} ; do
echo "My name is $N"
done
# while
COUNT=4
while [ $COUNT -gt 0 ]; do
echo "Value of count is: $COUNT"
COUNT=$(($COUNT - 1))
done
# until
COUNT=1
until [ $COUNT -gt 5 ]; do
echo "Value of count is: $COUNT"
COUNT=$(($COUNT + 1))
done
#!/bin/bash
function booh {
echo "booh!"
}
trap booh SIGINT SIGTERM
echo "it's going to run until you hit Ctrl+Z"
echo "hit Ctrl+C to be blown away!"
while true
do
sleep 60
done
Используемые метериалы
- https://www.learnshell.org/