Язык shell в Linux
[:upper:] - Символы в верхнем регистре
[^[:upper:]] - Кроме символов в верхнем регистре
[:digit:] - Десятичные цифры
[^- [:digit:]\(\)] - Кроме цифр, скобок, дефисов
Перевод первого символа строки в верхний регистр:
name=toly; echo $name | cut -c1 | tr '[:lower:]' '[:upper:]'
echo 347.22 | cut -d. -f1 #получить значения слева от точки
echo 347.22 | cut -d. -f2 #получить значения справа от точки
Цикл работает пока num больше 5, в теле уменьшается число num:
num=10; while [ $num -gt 5 ]; do echo $num; num=$(expr $num - 1); done
#getops необходим для выполнения команды в зависимости от выбранной опции
while getopts "a:b:" opt; do
case $opt in
a ) echo "Это опция a" ;;
b ) echo "Это опция b" ;;
esac
done
#Первый символ num, num без первого символа
num=-1; echo "${num%${num#?}}"; echo "${num#?}";
#Оставить в переменной все кроме цифр:
echo $num | sed "s/[[:digit:]]//g"
#1. Убрать все символы, кроме точки, 2. Вывод символов слева от точки, 3. Символы справа от точки:
num=10.5; echo $num | sed 's/[^.]//g'; echo $num | cut -d. -f1; echo ${num#*\.}
Замена вхождений с помощью утилиты tr
Замена регистра:
~/bash_scripts$ echo "HeLlo" | tr '[:upper:]' '[:lower:]'
hello
~/bash_scripts$ echo "HeLlo" | tr '[:lower:]' '[:upper:]'
HELLO
Если year не делится без остатка на 4, тогда...
~$ year=20; if [ "$((year % 4))" -ne 0 ] ; then echo echo 1; else echo 0; fi
0
Разбить дату на день, месяц, год:
~$ date=10/07/2022; echo $date | cut -d/ -f1
10
~$ date=10/07/2022; echo $date | cut -d/ -f2
07
~$ date=10/07/2022; echo $date | cut -d/ -f3
2022
Удалить из текста все знаки переноса:
cat test.txt | tr -d '\n'
shift сдвигает параметры на одну позицию влево, из первой переменной значение просто отбрасывается, это удобно использовать, когда неизвестно сколько параметров всего и параметры обрабатываются по очереди из первой переменной. Встроенный документ
bc << EOF
$test
$*
quit
EOF
$OPTIND - это индекс следующего обрабатываемого аргумента which - выводит полный путь до файла скрипта команды
Перебор аргументов
#!/bin/bash
for arg in "$@"
do
echo "${PREFIX}: $arg"
if [ -f ${arg} ] ; then
echo "${arg} is a file"
fi
#Либо использовать case
done
Если вызвать один сценарий командной оболочки из другого, по умолчанию он будет выполнен в собственной оболочке
t@x:~$ echo "test=2" >> tinyscript.sh
t@x:~$ chmod +x tinyscript.sh
t@x:~$ test=1
t@x:~$ ./tinyscript.sh
t@x:~$ echo $test
1
t@x:~$
Если выполнить это сценарий подключением файла с помощью точки идентичной команде source (include в языке C)FD
. tinyscript.sh
Таким образом можно подключить библиотечный файл с готовыми функциями, сценариями в один из каталогов перечисленных в окружении PATH
Для вывода отладочной информации используй bash -x script.sh
Как вариант, можно использовать set -x перед началом выполнения скрипта и set +x после выполнения скрипта
Получение случайного числа
echo $RANDOM
Вывод директорий из переменной $PATH
$ IFS=":"; for directory in $PATH ; do echo $directory; done