Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Создать калькулятор на bash

как создать на bin bash
Ответ:
Вопрос: Помогите с 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 не создается, это папка куда хочу положить все разипаные файлы

а сперва создать папку, а потом уже разархивировать туда?
Вопрос: Подскажите, как правильно сделать (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

Помогите с написанием скрипта:
Напишите калькулятор на bash. При запуске ваш скрипт должен ожидать ввода пользователем команды (при этом на экран выводить ничего не нужно). Команды могут быть трех типов:

Слово "exit". В этом случае скрипт должен вывести на экран слово "bye" и завершить работу.
Три аргумента через пробел -- первый операнд (целое число), операция (одна из "+", "-", "*", "/", "%", "**") и второй операнд (целое число). В этом случае нужно произвести указанную операцию над заданными числами и вывести результат на экран. После этого переходим в режим ожидания новой команды.
Любая другая команда из одного аргумента или из трех аргументов, но с операцией не из списка. В этом случае нужно вывести на экран слово "error" и завершить работу.
Чтобы проверить работу скрипта, вы можете записать сразу несколько команд в файл и передать его скрипту на stdin (т.е. выполнить ./script.sh < input.txt). В этом случае он должен вывести сразу все ответы на экран.

Например, если входной файл будет следующего содержания:
10 + 1
2 ** 10
exit
то на экране будет:
11
1024
bye

Если же на вход поступит следующий файл:
3 - 5
2/10
exit
то на экране будет:
-2
error
т.к. вторая команда была некорректной (в ней всего один аргумент, т.к. нет пробелов между числами и операцией, а единственная допустимая команда из одного аргумента это "exit").
Ответ:
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
#!/bin/bash
while [[ True ]]
do
  read birinchi amal ikkinchi
  if [[ $birinchi == "exit" ]]
  then
    echo "bye"
    break
  elif [[ "$birinchi" =~ "^[0-9]+$" && "$ikkinchi" =~ "^[0-9]+$" ]]
  then
    echo "error"
    break
  else
    case $amal in
"+") let "result = birinchi + ikkinchi";;
"-") let "result = birinchi - ikkinchi";;
"/") let "result = birinchi / ikkinchi";;
"*") let "result = birinchi * ikkinchi";;
"%") let "result = birinchi % ikkinchi";;
"**") let "result = birinchi ** ikkinchi";;
*) echo "error" ; break ;;
    esac
    echo "$result"
  fi
done
Вопрос: Тестовые задания bash

Некая компания прислала мне тестовое задание на должность DevOps.
Всего четыре вопроса, хочу разобрать свои ответы со специалистами, насколько адекватно и верно я ответил, так как компания молчит я уже не уверен в ответах.

PS Если тема создана не в том разделе пожалуйста перенесите ее в подходящий.


1) Существует каталог с 2 файлами, которые показаны как '???"и"???'. Они имеют разные названия, но в консоли отображаются в виде 3 вопросительных знаков. Как правильно их удалить?

ОТВЕТ :
Смоделировать описанную ситуацию мне не удалось и с правильно настроенной локализацией она практически исключена , к тому же создать в одной папке 2 файла с одинаковым именем не так то просто ) . 
По этому привожу команду которая в папке удалит “файлы” с именем ???
Bash
1
find "???" | xargs rm
Ответ:
Сообщение от Fanera
комментарий к ключу -r команды rm
Я по этому поводу всё уже сказал
Сообщение от Marinero
Чтоб случайно еще что-то удалить?
Вы же слышите только себя. Этот параметр избыточен и потенциально небезопасен. Но Вы почему-то решили что в папках находятся ТОЛЬКО архивные копии. Ну и т.д.
Сообщение от Fanera
и \bin\bash
Если скрипт исполняемый то /bin/bash не нужен, а самое главное в Вашем коде нет первого слэша.
Сообщение от Fanera
Не понимаю вашей позиции, вы тоже можете оказаться на месте соискателя..
Я Вас не понимаю. Вы обратились на форум всем доказать какой работодатель "редиска" или подробно разобрать что именно в Ваших решениях его не устраивает и постараться избегать этого в будущем?
Вопрос: Создать bash для копирования дерева каталогов с файлом

Нужно создать bash-файл, который находил бы файлы, у которых первый и последний символы в названии числа (остальные - любые), и копировал бы его и всё дерево каталогов, в котором он находиться, в новую папку.

Пример: есть файл 1ggg1.txt, он находиться в дереве каталогов /1/2/3. Нужно копировать в папку 4 папки 1,2,3 и в них нужный файл.
Ответ:
Код Bash
1
find SOURCE -name '[0-9]*[0-9].txt' -exec cp -t 4 --parents {} +
Почему не в разделе?
Вопрос: Скрипт Bash для записи системной информации

Есть такое задание: Написать скрипт, который создает файл и записывает в него информацию о памяти и процессоре.
Я нашел такие команды для решения задачи:
  • cat /proc/cpuinfo – информация ЦПУ
  • cat /proc/meminfo – информация о памяти
  • echo "text" >> filename - запись в файл
  • touch file - создать файл
А вот как это все собрать в кучу и записать в виде сценария на Bash - не знаю
Я новенький в Bash, подскажите, пожалуйста.
Ответ:
Код Bash
1
2
#!/bin/bash
cat /proc/cpuinfo /proc/meminfo >> file
Вопрос: Помогите не передаются входные программы из 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 - нет такого процесса. Пишет при попытке перезагрузить nginx на ubuntu

С конфигурационными файлами все в порядке.

Код Bash
1
2
3
root@maxserver:~# nginx -c /etc/nginx/nginx.conf -t**
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful


При попытке перечитать конфиг файл пишет такое.

Код Bash
1
2
root@maxserver:~# kill -HUP `cat /var/run/nginx.pid`
-bash: kill: (5289) - No such process


Если перезагружать то пишет fail

Код Bash
1
2
3
root@maxserver:~# sudo /etc/init.d/nginx restart
 * Restarting nginx nginx                                [fail] 
root@maxserver:~# 

В чем может быть причина? Почему он сообщает, что bash - нет такого процесса?
Ответ: А покажите
Код Bash
1
awk -F'[ \t;]+' '/[^#]pid/ {print $2}' /etc/nginx/nginx.conf