command1 ; command2 - выполнить последовательно две команды\\ command1 & command2 & - выполнить две команды, не дожидаясь их завершения\\ command1 && command2 - вторая команда выполняется, если первая завершилась успешно (код возврата 0)\\ command1 || command2 - вторая команда выполняется, если код возврата первой не 0 Виктор Костромин - [[http://citforum.ru/operating_systems/linux/user/|Линукс для пользователя]] ==== Проверка даты истечения сертификата SSL ==== URL='www.yandex.ru' EXP=$(date -d "$(timeout 1 openssl s_client -showcerts -connect $URL:443 -servername $URL 2>/dev/null | openssl x509 -noout -dates |grep 'notAfter' |cut -d '=' -f2)" +%s) echo $(((`echo $EXP` - `date +%s`) / 86400)) ==== IFS ==== Спец. переменная - разделитель полей. # Стандартное значение - IFS=$' \t\n' # В скриптах перед изменением значения IFS лучше сохранить старое значение, чтобы потом вернуть его обратно # 1. Save old $IFS oldIFS="$IFS" # 2. Now set up a new value to: IFS=":" # 3. Search for the user named 'vivek' /etc/passwd and store result into $result result="$(grep -w ^vivek /etc/passwd)" echo "$result" # 4. Print user 'vivek's directory and shell fields set -- $result echo "DIR: $6" echo "Shell: $7" # 5. Try bash for loop for i in $result; do echo "$i"; done # 6. Restore $IFS IFS="$oldIFS" Пример с ''read'' # Содержимое файла /tmp/domains.txt cyberciti.biz|202.54.1.1|/home/httpd|ftpcbzuser nixcraft.com|202.54.1.2|/home/httpd|ftpnixuser # Скрипт file=/tmp/domains.txt IFS='|' while read -r domain ip webroot ftpusername do printf "*** Adding %s to httpd.conf...\n" "$domain" printf "Setting virtual host using %s ip...\n" "$ip" printf "DocumentRoot is set to %s\n" "$webroot" printf "Adding ftp access for %s using %s ftp account...\n\n" "$domain" "$ftpusername" done < "$file" Есть другие варианты, использующие свой разделитель: # Search for the user named vivek and print home directory # The -F':' set ':' for the input field separator and value of $IFS always ignored awk -F':' '/vivek/{ print $6}' /etc/passwd # Search for the user named vivek and print home directory # The -d':' set ':' for the input field separator and value of $IFS always ignored grep -w "^vivek" /etc/passwd | cut -d':' -f6 [[https://bash.cyberciti.biz/guide/$IFS]] ==== Добавление строки $PATH в файл без дублей ==== FIXME Недоделано Задача была добавить некую строку к ''PATH'' и записать это в ''.bashrc'', но сделать так, чтобы эта строка не дублировалась. Ниже черновик. if grep -q ^PATH var.txt then if [[ $(grep ^PATH var.txt) == *"/var/www/html"* ]] then grep ^PATH var.txt |sed 's#^PATH=##' |tr ':' '\n' |sort -u |tr '\n' ':' |sed 's#^#PATH=#; s#:$##' else sed -i "s#^PATH=.*#PATH=$PATH:/var/www/html#" var.txt fi else echo "PATH=$PATH:/var/www/html" >> var.txt fi