Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Подскажите, как правильно сделать (bash, echo, pipes)

Приветствую!

Я не очень опытный пользователь Linux, поэтому сорри за возможно ламерский вопрос.
У меня задача: в CentOS7 строкой в файле bash (или в командной строке) сделать следующее: в определенный файл (допустим /tmp/my.txt) записать некую константную строку (допустим, "My PC hostname is"), затем добавить пробел и в той же строке вывести текущее имя хоста, получаемое выполнением команды hostname.

Что то типа такого (но так не работает - выводит только строку с именем хоста, без предшествующей константной части, это я привел для иллюстрации того, как я пытаюсь сделать):

 echo $'My PC hostname is ' | hostname >> /tmp/my.txt 


P.S. подсветки кода sh/bash на форуме, как я понял, нет, так что извините за некорретную подсветку

Спасибо.
Ответ:
Los Pejos
Приветствую!

Я не очень опытный пользователь Linux, поэтому сорри за возможно ламерский вопрос.
У меня задача: в CentOS7 строкой в файле bash (или в командной строке) сделать следующее: в определенный файл (допустим /tmp/my.txt) записать некую константную строку (допустим, "My PC hostname is"), затем добавить пробел и в той же строке вывести текущее имя хоста, получаемое выполнением команды hostname.

Что то типа такого (но так не работает - выводит только строку с именем хоста, без предшествующей константной части, это я привел для иллюстрации того, как я пытаюсь сделать):

 echo $'My PC hostname is ' | hostname >> /tmp/my.txt 


P.S. подсветки кода sh/bash на форуме, как я понял, нет, так что извините за некорретную подсветку

Спасибо.

Вы не поняли, что значит | (пайп). погуглите на тему.
Вопрос: Bash скрипт для скачивания картинок с веб-сайта

Нашел замечательный скрипт с данного источника -

#!/bin/bash
#Description: Images downloader
#Filename: img_downloader.sh
if [ $# -ne 3 ];
then
echo "Usage: $0 URL -d DIRECTORY"
exit -1
fi
for i in {1..4}
do
case $1 in
-d) shift; directory=$1; shift ;;
*) url=${url:-$1}; shift;;
esac
done
mkdir -p $directory;
baseurl=$(echo $url | egrep -o "https?://[a-z.]+")
curl –s $url | egrep -o "<img src=[^>]*>" | sed 's/<img src=\"\([^"]*\).*/\1/g' > /tmp/$$.list
sed -i "s|^/|$baseurl/|" /tmp/$$.list
cd $directory;
while read filename;
do
curl –s -O "$filename" --silent
done < /tmp/$$.list


Но к сожалению при выполнение команды под root пользователем, выдает Permission Denied. Подскажите в чем может быть проблема.
sh-3.2# ./img_downloader.sh http://www.flickr.com/search/?q=linux -d images
sh: ./img_downloader.sh: Permission denied
sh-3.2# whoami
root
sh-3.2# 
Ответ: брад галимый. я скачивал коллекцию картинок на вноый товар с сайта одной строкой по типу xsel | wget -O - | sed | wget

ну иногда небольшие вариации, например если надо переименовал файл..

xsel -b|wget -i - -O -|sed -rn 's/^.*"(http[^"]+.(gif|jpg|jpeg)).*/\1/p' |sed 's/thumb/full/' | wget -ci -


что-то по типу этого. но там не было двух картинок (нужных мне) указанных в одной строке исходников. (и второй сед явно не обязателен :) )
Вопрос: Работа со строками Bash

Дорогие форумчане, возникла резкая необходимость. В этих делах не в зуб ногой.
Файл с содержимым показывает вызов функции mail() в определённом файле:

user1 (mail) (dsbsmo4@list.ru) /home/user1/data/www/wp-config/erwkcwkcw.php
user3 (mail) (jfen835@list.ru) /home/user3/data/www/admin/system/cxmxmc.php
user3 (site) /home/user3/data/www/site.ru/index.php
user2 (mail) (hrj34fucr@list.ru) /home/user2/data/www/fake/root.php
user1 (mail) (r834fnjv@list.ru) /home/user1/data/www/wp-config/erwkcwkcw.php
user2 (site) /home/user1/data/www/order.ru/index.php
user2 (mail) (segkfwmkf@list.ru) /home/user1/data/www/sfmve/dskjfs/.404.php
user2 (mail) (dsfsdsd@list.ru) /home/user1/data/www/fdgkgd/43fmke.php
user2 (site) /home/user1/data/www/fiction/index.php
user1 (mail) (ewriwr43n@list.ru) /home/user1/data/www/site/assets/owl.php
user1 (mail) (sdmn348934@list.ru) /home/user1/data/www/mail/postform.php
user1 (mail) (pweneife@list.ru) /home/user1/data/www/wp-config/erwkcwkcw.php
Посчитать количество раз вызова функции mail() в файле для всех пользователей.

Вывести только:
count USER PATH
(взять за «ключ» «USER PATH»)

Например:
3 user1 /home/user1/data/www/wp-config/erwkcwkcw.php
Ответ:
Bash
1
awk '$2 ~ /mail/ {t[$1" "$4]++}; END { for (var in t) print t[var], var}' text
Вопрос: Помогите с bash новичку

Новичок в bash'е

есть папка OPTION_FL
-- подпапки
--- BATO
--- MCRY
--- XCBO

В каждой подпапке много zip архивов.

Как пробежаться по каждой подпапке и по каждому zip архиву внутри подпапки разархировать все zip и сложить в один файл ?
Ответ:
x17.mstu
x17.mstu,

find -type f -iname '*.gz' -execdir bash -c 'mkdir -p photo ; gunzip -d photo {}' \;


Попробовал вот так но папка photo не создается, это папка куда хочу положить все разипаные файлы

а сперва создать папку, а потом уже разархивировать туда?
Вопрос: Помогите не передаются входные программы из Autosys в bash script

bash-4.1$ /home/kushnira/archive_infile.bash $${FILE_DIR} $${ARCH_DIR} OPTION TL

сам скрипт archive_infile.bash:

#!/bin/bash

echo "Starting..."

INDIR=$1;
ARCH_DIR=$2;
ASSET_CLASS=$3;
ASSET_LEVEL=$4;
TIMESTAMP=$(date +%Y%m%d%H%M%S);

zip -r $ARCH_DIR$ASSET_CLASS\_$ASSET_LEVEL\_$TIMESTAMP.zip $INDIR;

входный параметр $${FILE_DIR}=/home/kushnira/FILE_DIR
$${ARCH_DIR}=/home/kushnira/$INDIR

При запуске получаю ошибку
Starting...
zip warning: name not matched: 2064455{FILE_DIR}

zip error: Nothing to do! (try: zip -r 2064455{ARCH_DIR}OPTION_TL_20180710142227.zip . -i 2064455{FILE_DIR})
bash-4.1$
Ответ:
x17.mstu
bash-4.1$ /home/kushnira/archive_infile.bash $${FILE_DIR} $${ARCH_DIR} OPTION TL


сам скрипт archive_infile.bash:

#!/bin/bash

echo "Starting..."

INDIR=$1;
ARCH_DIR=$2;
ASSET_CLASS=$3;
ASSET_LEVEL=$4;
TIMESTAMP=$(date +%Y%m%d%H%M%S);

zip -r $ARCH_DIR$ASSET_CLASS\_$ASSET_LEVEL\_$TIMESTAMP.zip $INDIR;

входный параметр $${FILE_DIR}=/home/kushnira/FILE_DIR
$${ARCH_DIR}=/home/kushnira/$INDIR

При запуске получаю ошибку
Starting...
        zip warning: name not matched: 2064455{FILE_DIR}

zip error: Nothing to do! (try: zip -r 2064455{ARCH_DIR}OPTION_TL_20180710142227.zip . -i 2064455{FILE_DIR})
bash-4.1$


Мессир, вы неправильно готовите

Ваш Вызов превращается в тыкву следущее (мои комментарии):

 
## Абсолютное имя выполняемого файла (правильно)
/home/kushnira/archive_infile.bash 

## pid текущего процесса, превращается в текущий Pid 2064455
$$ 

## та строка которую вы видите вместо части имени файла
{FILE_DIR} 

## pid текущего процесса, превращается в текущий Pid 2064455
$$
{ARCH_DIR} 
## остаток строки
OPTION TL


Попробуйте:
bash-4.1$ /home/kushnira/archive_infile.bash ${FILE_DIR} ${ARCH_DIR} OPTION TL


Где
${FILE_DIR} - значение переменной окружения FILE_DIR (Она у Вас определена?)
${ARCH_DIR} - значение переменной окружения ARCH_DIR (Она у Вас определена?)

проверить можно:
env | grep FILE_DIR
env | grep ARCH_DIR

если не определено, пропишите явно
проверьте что эти директории существуют
Вопрос: Вывод bash скрипта в формате JSON

Добрый день!
Обращаюсь за помощью к специалистам.

Задача - сделать отображение состояния бекапов встроенными средствами виртуальной платформы Proxmox через Zabbix.
Ничего готового не нашел. Зато нашел опубликованный пользователем skygge на форуме zabbix.com скрипт: . Скрипт очень хороший, но очень малоинформативный.
После исследования и раздумий принял решение попробовать своими силами и минимальным знанием скриптинга его переделать полноценный шаблон с автоматическим обнаружением виртуалок, и мониторинга состояния бекапа каждой. Если получится, то опубликую на share.zabbix.com.

Проблема: как и ожидал, застрял на выводе результатов в формате JSON, которые нужно передавать в Zabbix.
Вот мой discovery-script на текущем этапе:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
 
# Script for checking ProxMox virtual machines backup. For use in Zabbix. Skygge@2016
 
#Variables
 
backupconfig='/etc/pve/vzdump.cron'
storageconfig='/etc/pve/storage.cfg'
configdir='/etc/pve/local/qemu-server'
 
# Virtual machines
virtualmachines=`find $configdir -type f -name "*.conf" |cut -d "/" -f 6|cut -d "." -f 1`
 
# Backup Configuration for VM's
backupallmachines=`grep '\-\-all' $backupconfig|wc -l`
 
# Check every VM for configured backup
if [ "$backupallmachines" = "0" ]; then
for i in $virtualmachines
do
    backupenabled=1
 
    checkbackup=`grep $i $backupconfig |sed 's/  */ /g'|cut -d "-" -f 1|cut -d " " -f 8-|tr -d "\n"`
    if [ "$checkbackup" = "" ];then
        echo "VM $i is not configured for backups."
        backupenabled=0
    fi
 
    checkbackupenabled=`grep $i $backupconfig | grep "#vzdump" | sed 's/  */ /g'|cut -d "-" -f 1|cut -d " " -f 8-|tr -d "\n"`
    if ! [ "$checkbackupenabled" = "" ];then
        echo "Backup for VM $i is configured, but disabled."
        backupenabled=0
    fi
 
 
echo -e "{\"VM_NUMBER\":\""$i"\", \"BACKUP_STATUS\":\""$i,$backupenabled"\"}"
 
done
fi
(Выводы "echo" оставил пока что сознательно, для траблшутинга. Знаю, что в выводе лишнего быть не должно.)


Вывод сейчас такой:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ./vms_discovery
{"VM_NUMBER":"100", "BACKUP_STATUS":"100,1"}
 
$ sudo ./vms_discovery
{"VM_NUMBER":"106", "BACKUP_STATUS":"106,1"}
{"VM_NUMBER":"103", "BACKUP_STATUS":"103,1"}
{"VM_NUMBER":"101", "BACKUP_STATUS":"101,1"}
 
$ sudo ./vms_discovery
VM 106 is not configured for backups.
{"VM_NUMBER":"106", "BACKUP_STATUS":"106,0"}
{"VM_NUMBER":"103", "BACKUP_STATUS":"103,1"}
VM 101 is not configured for backups.
{"VM_NUMBER":"101", "BACKUP_STATUS":"101,0"}
Вот из этого всего прошу, пожалуйста, помочь мне сделать полноценный JSON. Самое страшное для меня - запятые после блоков данных, которые надо расставить не просто тупо в конце каждой строки, а пропустить последнюю. Вот тут я в лужу сел полностью.

Вот пример вывода, который Zabbix принимает на ура:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
{
        "data":[
 
                {
                        "{#DISKNAME}":"/dev/sda -d sat",
                        "{#DISK_STATUS}":"1,1"
                },
                {
                        "{#DISKNAME}":"/dev/sdb -d sat",
                        "{#DISK_STATUS}":"1,1"
                }
        ]
}
(взято из другого скрипта)

Самое интересное, что тут есть даже готовое решение: , и им можно было бы попробовать воспользоваться. Вот только прикрутить его у меня ума на текущем жизненном этапе не хватает.

Заранее благодарен за помощь!
Ответ: Max Dark,

Не по теме:

ну что и требовалось доказать: вместо скрипта на 20 строк из которых значимых команд: grep, find и цикл получаем одороболо на почти 100 строк...

Вопрос: Bash наименьшее кратное двух чисел

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
echo "Введите первое число"
read a
echo "Введите второе число"
read b
COUNTER=0
nu=0
while [  $COUNTER -lt 10 ]; do
    aa=$(($COUNTER % $a))
    bb=$(($COUNTER % $b))
    if ["$aa" -eq "$nu"];
        then    
            if ["$bb" -eq "$nu"];
                then    
                    echo "наименьшее кратное=$i"
                    break
                else
                    ((COUNTER++))
            fi
    fi
done
Задание: нужно найти минимальное кратное двух введенных чисел.
Выдает бесконечно такую "kod.sh: 11: kod.sh: [0: not found" ошибку.
Помогите поправить код, спасибо!

Добавлено через 1 час 20 минут
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
echo "Введите первое число"
read a
echo "Введите второе число"
read b
COUNTER=1
nu=0
while [ 1 ]; do
        aa=$(($COUNTER % $a))
        bb=$(($COUNTER % $b))
        if ["$aa" -eq "$nu"]
            then    
                if ["$bb" -eq "$nu"]
                    then    
                        echo "наименьшее кратное=$COUNTER"
                        break
                else
                    COUNTER=`expr $COUNTER + 1`
                fi
        fi
done
Прошу прощения, тот код был из "черновика". Он просто ужасен, а этот похож на рабочий но не работает(придероется к 11 строке, т.е. к 1 условию с такой "kod.sh: 11: kod.sh: [1: not found" ошибкой, P.s. kod.sh мой файл)
Помогите решить проблему, спасибо!
Ответ: 1.
Bash
1
2
3
4
5
6
if [ $a -le $b ] 
then
    nu=$a
else
    nu=$b
fi
2.
Bash
1
while [ $nu -le $(($a * $b)) ]
3.
Bash
1
nu=$((nu/$COUNTER*$((++COUNTER))))
Вопрос: Люди у меня прооблемы с bash скриптом

У меня есть скрипт bash но он не запускается пишет"Строка 13 Ошибка синтаксиса около неожиданной лексемы`$'do\r''
Помогите, если скрипт заработает заплачу не много денежек, тому кто помог.

#/!bin/bash
my_wt_id="90829046"
my_qiwi_id="79185787309"
my_yamrub_id="410011372197831"
my_privat_id=""
my_nix_id=""
my_mail="leon97leon97@gmail.com"
IFS='\n'
while [ 1=1 ]
do
wget -q -O- | sort | grep "WTUSD" > /tmp/check.txt
for val in `cat /tmp/check.txt`
do
#echo "$val" | cut -d ";" -f4
#| awk '{print $1}'
val_name=`echo "$val" | cut -d ";" -f2`
val_curr=`echo "$val" | cut -d ";" -f4`
val_rezerv=`echo "$val" | cut -d ";" -f5`
wt_summ=`echo "$val_rezerv / $val_curr" | bc -l | sed 's/..............$//'`
# echo "$val_name $val_curr $val_rezerv wt_summ= $wt_summ"
wt_summ_if=`echo "$val_rezerv / $val_curr" | bc `
if [ $val_name = "YAMRUB" ]
then
echo "$val_name $val_curr $val_rezerv wt_summ= $wt_summ"
date
if [ "$wt_summ_if" -gt "50" ]
then

gt_summ=`echo "10000 / $val_curr" | bc`
if [ "$wt_summ_if" -gt "$gt_summ" ]
then
$wt_summ=$gt_summ
$val_rezerv="10000"
fi

echo "try to exchange $val_name"
curl -i \
-H "Accept: application/json, text/javascript, */*; q=0.01" \
-H "Content-Type:application/x-www-form-urlencoded; charset=UTF-8" \
-H "X-Requested-With:XMLHttpRequest" \
-X POST --data 'idobmen=199&mesto=2&idfirst1=25&summ1='$wt_summ'&wschet1='$my_wt_id'&idfirst2=24&summ2='$val_rezerv'&wschet2='$my_yamrub_id'&obmen_f=%D0%94%D0%BE%D0%B1%D1%80%D1%8F%D0%BA%D0%BE%D0%B2%D0%B0&obmen_i=%D0%90%D0%BA%D1%81%D0%B0%D0%BD%D0%B0&obmen_email=leon97leon97%40gmail.com' "https://ex-wt.com/wp-content/plugins/exchangebox/ajax/zakaz.php" | sendmail -vt $my_mail #>> /tmp/curl1.log
fi
fi

if [ $val_name = "QWRUB" ]
then
echo "$val_name $val_curr $val_rezerv wt_summ= $wt_summ"
date
echo " "
if [ "$wt_summ_if" -gt "50" ]
then
echo "try to exchange $val_name"
curl -i \
-H "Accept: application/json, text/javascript, */*; q=0.01" \
-H "Content-Type:application/x-www-form-urlencoded; charset=UTF-8" \
-H "X-Requested-With:XMLHttpRequest" \
-X POST --data 'idobmen=197&mesto=2&idfirst1=25&summ1='$wt_summ'&wschet1='$my_wt_id'&idfirst2=27&summ2='$val_rezerv'&wschet2='$my_qiwi_id'&obmen_f=%D0%94%D0%BE%D0%B1%D1%80%D1%8F%D0%BA%D0%BE%D0%B2%D0%B0&obmen_i=%D0%90%D0%BA%D1%81%D0%B0%D0%BD%D0%B0&obmen_email=leon97leon97%40gmail.com' "https://ex-wt.com/wp-content/plugins/exchangebox/ajax/zakaz.php" | sendmail -vt $my_mail #>> /tmp/curl1.log
fi
fi

# if [ $val_name = "P24UAH" ]
# then
# echo "$val_name $val_curr $val_rezerv wt_summ= $wt_summ"
# date
# echo " "
# if [ "$wt_summ_if" -gt "50" ]
# then
# echo "try to exchange $val_name"
# curl -i \
# -H "Accept: application/json, text/javascript, */*; q=0.01" \
# -H "Content-Type:application/x-www-form-urlencoded; charset=UTF-8" \
# -H "X-Requested-With:XMLHttpRequest" \
# -X POST --data 'idobmen=198&mesto=2&idfirst1=25&summ1='$wt_summ'&wschet1='$my_wt_id'&idfirst2=16&summ2='$val_rezerv'&wschet2='$my_privat_id'&obmen_f=%D0%94%D0%BE%D0%B1%D1%80%D1%8F%D0%BA%D0%BE%D0%B2%D0%B0&obmen_i=%D0%90%D0%BA%D1%81%D0%B0%D0%BD%D0%B0&obmen_email=leon97leon97%40gmail.com' "https://ex-wt.com/wp-content/plugins/exchangebox/ajax/zakaz.php"# echo 'created ticket' | sendmail -vt $my_mail
# fi
# fi

# if [ $val_name = "NIXUSD" ]
# then
# echo "$val_name $val_curr $val_rezerv wt_summ= $wt_summ"
# date
# echo " "
# if [ "$wt_summ_if" -gt "50" ]
# then
# echo "try to exchange $val_name"
# curl -i \
# -H "Accept: application/json, text/javascript, */*; q=0.01" \
# -H "Content-Type:application/x-www-form-urlencoded; charset=UTF-8" \
# -H "X-Requested-With:XMLHttpRequest" \
# -X POST --data 'idobmen=196&mesto=2&idfirst1=25&summ1='$wt_summ'&wschet1='$my_wt_id'&idfirst2=28&summ2='$val_rezerv'&wschet2='$my_nix_id'&obmen_f=%D0%94%D0%BE%D0%B1%D1%80%D1%8F%D0%BA%D0%BE%D0%B2%D0%B0&obmen_i=%D0%90%D0%BA%D1%81%D0%B0%D0%BD%D0%B0&obmen_email=leon97leon97%40gmail.com' "https://ex-wt.com/wp-content/plugins/exchangebox/ajax/zakaz.php"# echo 'created ticket' | sendmail -vt $my_mail
# fi
# fi
done

echo " "
echo " "
echo " "
done

Добавлено через 4 минуты
Код Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#/!bin/bash
my_wt_id="90829046"
my_qiwi_id="79185787309"
my_yamrub_id="410011372197831"
my_privat_id=""
my_nix_id=""
my_mail="leon97leon97@gmail.com"
IFS='\n'
while [ 1=1 ]
do
    wget -q -O- [url]https://ex-wt.com/exporttxt.txt[/url] | sort | grep "WTUSD" > /tmp/check.txt
    for val in `cat /tmp/check.txt`
    do
        #echo "$val" | cut -d ";" -f4
        #| awk '{print $1}'
        val_name=`echo "$val" | cut -d ";" -f2`
        val_curr=`echo "$val" | cut -d ";" -f4`
        val_rezerv=`echo "$val" | cut -d ";" -f5`
        wt_summ=`echo "$val_rezerv / $val_curr" | bc -l | sed 's/..............$//'`
#       echo "$val_name $val_curr $val_rezerv wt_summ= $wt_summ"
        wt_summ_if=`echo "$val_rezerv / $val_curr" | bc `
        if [ $val_name = "YAMRUB" ]
        then
        echo "$val_name      $val_curr      $val_rezerv      wt_summ= $wt_summ"
        date
              if [ "$wt_summ_if" -gt "50" ]
              then 
            
            gt_summ=`echo "10000 / $val_curr" | bc`
            if [ "$wt_summ_if" -gt "$gt_summ" ]
            then
                $wt_summ=$gt_summ
                $val_rezerv="10000"
            fi
            
                echo "try to exchange $val_name"
                curl -i \
                -H "Accept: application/json, text/javascript, */*; q=0.01" \
                -H "Content-Type:application/x-www-form-urlencoded; charset=UTF-8" \
                -H "X-Requested-With:XMLHttpRequest" \
                -X POST --data 'idobmen=199&mesto=2&idfirst1=25&summ1='$wt_summ'&wschet1='$my_wt_id'&idfirst2=24&summ2='$val_rezerv'&wschet2='$my_yamrub_id'&obmen_f=%D0%94%D0%BE%D0%B1%D1%80%D1%8F%D0%BA%D0%BE%D0%B2%D0%B0&obmen_i=%D0%90%D0%BA%D1%81%D0%B0%D0%BD%D0%B0&obmen_email=leon97leon97%40gmail.com' "https://ex-wt.com/wp-content/plugins/exchangebox/ajax/zakaz.php" | sendmail -vt $my_mail    #>> /tmp/curl1.log 
              fi
        fi
        
        if [ $val_name = "QWRUB" ]
        then
        echo "$val_name      $val_curr      $val_rezerv      wt_summ= $wt_summ"
        date
        echo " " 
            if [ "$wt_summ_if" -gt "50" ]
            then 
                echo "try to exchange $val_name"
                curl -i \
                -H "Accept: application/json, text/javascript, */*; q=0.01" \
                -H "Content-Type:application/x-www-form-urlencoded; charset=UTF-8" \
                -H "X-Requested-With:XMLHttpRequest" \
                -X POST --data 'idobmen=197&mesto=2&idfirst1=25&summ1='$wt_summ'&wschet1='$my_wt_id'&idfirst2=27&summ2='$val_rezerv'&wschet2='$my_qiwi_id'&obmen_f=%D0%94%D0%BE%D0%B1%D1%80%D1%8F%D0%BA%D0%BE%D0%B2%D0%B0&obmen_i=%D0%90%D0%BA%D1%81%D0%B0%D0%BD%D0%B0&obmen_email=leon97leon97%40gmail.com' "https://ex-wt.com/wp-content/plugins/exchangebox/ajax/zakaz.php" | sendmail -vt $my_mail #>> /tmp/curl1.log 
            fi
        fi
        
#       if [ $val_name = "P24UAH" ]
#       then
#       echo "$val_name      $val_curr      $val_rezerv      wt_summ= $wt_summ"
#       date
#       echo " " 
#           if [ "$wt_summ_if" -gt "50" ]
#           then 
#               echo "try to exchange $val_name"
#               curl -i \
#               -H "Accept: application/json, text/javascript, */*; q=0.01" \
#               -H "Content-Type:application/x-www-form-urlencoded; charset=UTF-8" \
#               -H "X-Requested-With:XMLHttpRequest" \
#               -X POST --data 'idobmen=198&mesto=2&idfirst1=25&summ1='$wt_summ'&wschet1='$my_wt_id'&idfirst2=16&summ2='$val_rezerv'&wschet2='$my_privat_id'&obmen_f=%D0%94%D0%BE%D0%B1%D1%80%D1%8F%D0%BA%D0%BE%D0%B2%D0%B0&obmen_i=%D0%90%D0%BA%D1%81%D0%B0%D0%BD%D0%B0&obmen_email=leon97leon97%40gmail.com' "https://ex-wt.com/wp-content/plugins/exchangebox/ajax/zakaz.php"#               echo 'created ticket' | sendmail -vt $my_mail
#           fi
#       fi
        
#       if [ $val_name = "NIXUSD" ]
#       then
#       echo "$val_name      $val_curr      $val_rezerv      wt_summ= $wt_summ"
#       date
#       echo " " 
#           if [ "$wt_summ_if" -gt "50" ]
#           then 
#               echo "try to exchange $val_name"
#               curl -i \
#               -H "Accept: application/json, text/javascript, */*; q=0.01" \
#               -H "Content-Type:application/x-www-form-urlencoded; charset=UTF-8" \
#               -H "X-Requested-With:XMLHttpRequest" \
#               -X POST --data 'idobmen=196&mesto=2&idfirst1=25&summ1='$wt_summ'&wschet1='$my_wt_id'&idfirst2=28&summ2='$val_rezerv'&wschet2='$my_nix_id'&obmen_f=%D0%94%D0%BE%D0%B1%D1%80%D1%8F%D0%BA%D0%BE%D0%B2%D0%B0&obmen_i=%D0%90%D0%BA%D1%81%D0%B0%D0%BD%D0%B0&obmen_email=leon97leon97%40gmail.com' "https://ex-wt.com/wp-content/plugins/exchangebox/ajax/zakaz.php"#              echo 'created ticket' | sendmail -vt $my_mail
#           fi
#       fi
    done
      
    echo " " 
    echo " "
    echo " "
done
Ответ: У Вас 91 строка закоментирована (кроме того хорошим тоном считается приложить текст ошибки)
Вопрос: Парсинг вывода команды на bash

Здравствуйте, есть результат выполнения утилиты:
Код Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sh-4.1# failover info
Running failover info
Versions: ViPNet 3.3.0 (921), daemon 1.5 (1)
Workstation configured for ID *(*)
The workstation works in a cluster mode of protection against failures
Workstation time (utc: 1429845555) Fri Apr 24 09:19:15 2015
 
                * local         * remote
failover mode   * active        * passive
failover uptime * 0d 15:11      * 0d 15:09
total cpu       * 29%           * 30%
total memory    * 2047532 kB    * 2047532 kB
free memory     * 1748088 kB    * 1844296 kB
failover state  * works         * works
failover cpu    * 3%            * 2%
iplir state     * works         * works
iplir cpu       * 13%           * 0%
mftp state      * works         * works
mftp cpu        * 25%           * 33%
Нужен скрипт на баше (или, может быть, это возможно сделать одной командой), который при передаче ему параметра, например, iplir cpu, выдавал только числовое значение из столбца "* local". Параметры которые будут передаваться скрипту, имеют только числовые значения, а именно: failover cpu, iplir cpu, mftp cpu.

В общем, результат должен выглядеть так:
Код Bash
1
2
#./script.sh failover cpu
3
А еще, как вариант, мне подойдёт утилита, возвращающая загруженность процессора определенным процессом в момент обращения (ps не подойдёт).

Надеюсь на вашу помощь.
Ответ: Была бы охота вводить такие длинные строки, ксли достаточно 1 первой буквы
Код Bash
1
2
3
4
5
6
7
8
9
#!/bin/bash
case $1 in 
    f*) p='failover' ;;
    i*) p='iplir' ;;
    m*) p='mftp' ;;
    *) echo "Wrong input. Use f/i/m symbols for failover/iplir/mftp cpu data" ; exit 1 ;;
esac
 
failover info | grep -oP "$p cpu\s*\*\s*\K[0-9]*"
Вопрос: Можете объяснить этот Bash код?

Можете объяснить этот Bash код? Как он работает?
Код Bash
1
grep -E '^([^!]+!){3}[0-9]{2}' file1
Ответ:
Сообщение от Lord007
[0-9] - это числа которые нельзя выбирать?
Не совсем так. Возьмем строку:
Код Code
1
2
3
100870!ACE TENNIS BALLS-3 PACK     !2.8   !2.4   !01-JAN-90
      ^                            ^      ^__
      1                            2      3дн
Первые 3 группы, заканчивающиеся "!" (помечены номерами), совпадают с ^([^!]+!){3}.
Далее, как было сказано выше, должны следовать 2 цифры подряд: символ из диапазона [0-9], и еще раз символ из этого дипазона ({2} говорит, что предыдущая маска должна быть учтена 2 раза, то есть это аналог записи [0-9][0-9]).
Первый символ после 3-го "!" -- это 2, а вот следующий за ним символ -- это ".", которая не попадает под маску [0-9], поэтому строка исключается из вывода.