Инструменты пользователя

Инструменты сайта


service:bash

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
service:bash [07.10.2019 14:13] – [Проверка даты истечения сертификата SSL] viacheslavservice:bash [30.10.2024 21:24] (текущий) – [Добавление строки $PATH в файл без дублей] viacheslav
Строка 1: Строка 1:
 +command1 ; command2 - выполнить последовательно две команды\\
 +command1 & command2 & - выполнить две команды, не дожидаясь их завершения\\
 +command1 && command2 - вторая команда выполняется, если первая завершилась успешно (код возврата 0)\\
 +command1 || command2 - вторая команда выполняется, если код возврата первой не 0
  
 +Виктор Костромин - [[http://citforum.ru/operating_systems/linux/user/|Линукс для пользователя]]
 +
 +==== Проверка даты истечения сертификата SSL ====
 +<code bash>
 +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))
 +</code>
 +
 +==== IFS ====
 +Спец. переменная - разделитель полей.
 +<code bash>
 +# Стандартное значение - <space><tab><newline>
 +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"
 +</code>
 +
 +Пример с ''read''
 +<code bash>
 +# Содержимое файла /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"
 +</code>
 +
 +Есть другие варианты, использующие свой разделитель:
 +<code bash>
 +# 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
 +</code>
 +[[https://bash.cyberciti.biz/guide/$IFS]]
 +
 +==== Добавление строки $PATH в файл без дублей ====
 +FIXME Недоделано
 +
 +Задача была добавить некую строку к ''PATH'' и записать это в ''.bashrc'', но сделать так, чтобы эта строка не дублировалась. Ниже черновик.
 +<code bash>
 +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
 +</code>

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki