Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

Открыть новую тему     Написать ответ в эту тему

digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи вопрошающие! Если ваша система отлична от ГНУ, и в то же время вы желаете обойтись только дефолтными средствами, указывайте и то и другое сразу, пожалуйста.


UNIX Shell

 
   Это глобальная тема по юниксовой командной оболочке, как по интерактивной работе в командной строке, так и по шелл-скриптам. Ключевые слова: sh, bash, zsh, tcsh, busybox, readline, coreutils, cp, mv, ln, rm, ls, readlink, mkdir, touch, stat, date, test, sleep, chown, chmod, chattr, dd, df, du, env, echo, cat, less, man, grep, sort, findutils, find, locate, xargs, md5sum, cmp, diff, patch, ps, kill, killall, tar, gzip, bzip2, xz, mount, fdisk, parted, mkfs, fsck, e2fsprogs, mtools, ss, netcat, netstat, rsync, ssh, scp, sftp, lftp, ncftp, time, strace.
   Неинтерактивная обработка текста (sed, awk, perl) пока тоже здесь.
   Смотри в других ветках: wget, convert, montage, mogrify и др., gs, git, 7z, p7zip, soffice, mplayer, mencoder, vlc, vim, mc, mcedit, kioclient.
 
 

Hint! Русские маны (подустаревшие, не всегда полные и не всегда для вашей системы) можно попытаться найти на Опеннете, к примеру: bash, tar, grep.

 
Готовые решения:
  • commandlinefu.com
    Крупнейшая база полезных однострочников на командной оболочке с ранжированием на основе пользовательского голосования.
     
  • shell-fu.org
    Аналогично, но поменьше и формат записей более свободный, поэтому встречаются и однострочники, и развернутые скрипты, и просто советы.
     
  • Useful one-line scripts for sed
    Почти исчерпывающий список решений для тех случаев, когда sed незаменим. Более сложные скрипты с sed.sf.net — только для тех, кто знает толк... :)

 
Учебная литература:
  • Greg’s Wiki (http://mywiki.wooledge.org)
    Наиболее обширный авторский сборник постоянно обновляющихся материалов по Башу.

    1. Bash Pitfalls
      (Частые ошибки программирования на Баше: [1], [2], [3], [4], [5] — пер. на русский по сост. на дек. 2008 г.).
      Рассмотрены преимущественно ошибки, возникающие из-за непонимания отличия шелла от «нормальных» скриптовых языков. Если вы уже владеете, например, Перлом, то это вполне может быть ваше первое руководство для ознакомления с Башем.
    2. Bash FAQ
    3. Bash Guide
    4. Bash Reference Sheet
      Шпаргалка по частым синтаксическим оборотам.

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

 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.
Первый пост темы имел вид...

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Цитата:
→ - а это что за символ ?  
а, сорян, это стрелка вправо. Я использую compose key для такого, и не заметил что форум не смог в unicode символ. Это я для echo только. в mv он не нужен

Цитата:
А строк примерно столько же, сколько и в моем одинарном случае ).
верю, но когда скрипт это логичное что-то а не набор однотипных строк то понимать его и править сильно проще.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 23:22 03-03-2024
newclyde

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
 
Подскажите, пожалуйста, команду для подключения к WiFi сети.
 
Lenovo 100e Chromebook 3 Gen. ChromeOS 122.0.6261.100.
GNU Bash, version 5.1.16(1)-release (x86_64-cros-linux-gnu).
 
Нужна команда для V2 терминала. Я набрал "sudo iw wlan0 scan | grep SSID", чтобы увидеть доступные сети, но не знаю команду, чтобы ввести имя и пароль.
 
Заранее спасибо.

Всего записей: 831 | Зарегистр. 26-03-2009 | Отправлено: 05:21 07-03-2024
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Что-то не хватает.

Код:
 
++ date +%Y/%m/%d/%H-%M.aac -d '2024-03-07 /2024/03/07/20:59 1min'
date: неверная дата «-mnt-sda2 2024-03-07 /2024/03/07/20:59 1min»
+ nf=
+ echo ''
 

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 11:48 08-03-2024 | Исправлено: digital422, 12:11 08-03-2024
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
newclyde
iw не умеет в WPA2, только в WEP или без пароля.
wpa_supplicant нужно использовать.
 
https://wiki.archlinux.org/title/Wpa_supplicant#Connecting_with_wpa_passphrase
За chromeos не уверен, но в целом всё примерно тоже самое  должно быть.
 
Добавлено:
digital422
Ну так покажите во что Вы там мой скрипт превратили?
То что у меня было в $t тут явно не тоже самое. Почему там пусть остался?

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 15:10 08-03-2024
newclyde

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Спасибо!

Всего записей: 831 | Зарегистр. 26-03-2009 | Отправлено: 22:56 08-03-2024
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Код не менялся, тестирую как есть. Ошибка в разборе t, меняются слеши в пути /mnt/sda2/2024/03/07 на -mnt-sda2 2024-03-07. Для теста сделал t0 и t1, t1 только со временем сработал.
 

Код:
 
y=$(date +%Y)
m=$(date +%m)
d=$(date +%d -d "1 day ago")
ext=aac
t0="2024/03/07/20:59"
t1="20:59"
nf0=$(TZ=UTC date "+%Y/%m/%d/%H-%M.$ext" -d "$y-$m-$d $t0 1min")
nf1=$(TZ=UTC date "+%Y/%m/%d/%H-%M.$ext" -d "$y-$m-$d $t1 1min")
 
echo $nf0
echo $nf1
 

 
Вывод:
 
date: неверная дата «2024-03-08 2024/03/07/20:59 1min»
nf0:
nf1: 2024/03/08/21-00.aac

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 08:43 09-03-2024
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сделал пока так, убрал в поиске весь путь, чтобы осталось только имя файла, а путь уже буду подставлять в mv.  
 

Код:
 
ext=aac
while read -u 9 -r f; do
 
    IFS=/ read -r n <<<"$f"
 
    nf=$(TZ=UTC date "+%H-%M.$ext" -d "$t 1min")
 
    t=${n%."$ext"}
    t=${t//-/:}
 
   # mv ...
 
done 9< <(find 2024/ -type f -name "*-59.$ext" -printf "%f\n")
 

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 09:23 10-03-2024 | Исправлено: digital422, 09:23 10-03-2024
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Ну так потому что date не умеет разбирать такой формат даты.
То что Вы руками положили в t0 то что он не может переварить. так зачем так делать?)
 
Я ни чего не понял — зачем ломать то что я написал?
В $t у меня только _время_ и ни чего больше.
И в выводе у Вас нет дат больше, а как понять куда делать mv???
Чёт, кроч, я ни чего не понял в том что Вы сделали.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 12:17 10-03-2024
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd

Цитата:
В $t у меня только _время_ и ни чего больше.  

Возможно здесь и была проблема, т.к. у меня кроме времени выводился путь и дата, поэтому пришлось в find сделать -printf "%f\n" и скрипт заработал. t0 - это Ваш вариант после findа c ручной вставкой.  
 
Скорее всего find 2024/ предполагалось что там в корне будет сразу %H-%M.aac. А в реальности путь такой: /mnt/sda2/2024/03/07/20-59.aac.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 14:32 10-03-2024 | Исправлено: digital422, 14:36 10-03-2024
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Я так и не понял главного — а что и зачем понадобилось менять относительно того что я написал в скрипте изначально. Там же сразу была логика что ищем по всем путям всё что у Вас считается ошибкой ffmpeg (т.е. заканчивается на -59), и дальше выясняем исходя из пути и имени файла какое должно быть на самом деле время и дата.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 14:36 10-03-2024
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Вот так Ваш вариант срабатывает, надо зайти в папку и из нее делать find. А я прописывал полный путь, поэтому и был хвост с путем.

Код:
 
done 9< <(cd /mnt/sda2/rec; find $YEAR/ -type f -name "-59.$ext")
 

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 16:28 10-03-2024
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
ну делать cd, или отрезать ненужно начало это совсем не сложно. Общая логика при этом ни как не меняется

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 16:45 10-03-2024
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возникла надобность в рамках одного скрипта использовать разные шеллы (bash и sh/dash). Точнее там нужно использовать при наличии на внешнем накопителе нужного шелла и если такового нет, использовать встроенный. Вот только увязать if без доп обёрток в рамках одного скрипта у меня не выходит. 2 шебанга не катят. Вариант с EOF вроде бы показался рабочим, но ряд свисто-перделок баша пролетает мимо. Кода там много и в одну команду не упихнёшь (это я про ключ "-c"). Как выполнить скрипты разными шеллами из одного скрипта мне и так понятно. Нужно выполнить код в рамках именно одного, исходного скрипта.

Всего записей: 2309 | Зарегистр. 19-09-2011 | Отправлено: 06:14 14-04-2024 | Исправлено: Baltazar500, 09:34 14-04-2024
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Baltazar500
https://askubuntu.com/questions/97522/how-can-my-script-determine-whether-its-being-run-by-bash-or-dash

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 21:23 15-04-2024
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
U235, там чекается либо $SHELL, либо $BASH_VERSION и по if даётся echo выхлоп. Это не совсем то, что нужно. В целом можно на if повесить код, который разнится от shell'а к shell'у, но те же переменные типа LANG и LC_ALL пролетят мимо, если shebang-шелл будет dash и обработка текста зависимая от них накроется медным тазом (а восприятие этих переменных у разных шеллов ой как разнится).

Всего записей: 2309 | Зарегистр. 19-09-2011 | Отправлено: 21:48 15-04-2024 | Исправлено: Baltazar500, 22:02 15-04-2024
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Baltazar500

Цитата:
В целом можно на if повесить код, который разнится от shell'а к shell'у...

пишите для posix, а если присутствует bash то...
#!/bin/sh
if ! [ -x "$(command -v bash)" ]
then
....
else
....
fi
Или такой вариант не очень подходит?i

Всего записей: 7727 | Зарегистр. 08-09-2001 | Отправлено: 09:40 16-04-2024
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los,
Цитата:
Или такой вариант не очень подходит?
О том и речь. Походу придётся польховаться скриптом - обёрткой с if и двумя версиями скриптов. Под dash/sh и bash.

Всего записей: 2309 | Зарегистр. 19-09-2011 | Отправлено: 09:48 16-04-2024
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los
так зачем тогда if?
Baltazar500
Можно уже просто что бы везде работал POSIX совместимый скрип. Эту же логику всё равно придётся описать, зачем тогда вторую вообще поддерживать?

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 18:04 16-04-2024
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd,
Цитата:
Можно уже просто что бы везде работал POSIX совместимый скрип. Эту же логику всё равно придётся описать, зачем тогда вторую вообще поддерживать?
Там с обрезкой кириллицы тараканы от конкретного shell'а к shell'у на конкретном устройстве разнятся. Есть готовое решение, но оно требует наличие "внешней" bash - бинари, что в свою очередь требует дополнительных обёрточных костылей. Я конечно попробую адаптировать, но меня терзают смутные сомнения, что выйдет что-то путное.

Всего записей: 2309 | Зарегистр. 19-09-2011 | Отправлено: 03:19 18-04-2024 | Исправлено: Baltazar500, 03:20 18-04-2024
tirex2k



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Решено.
задача для каждого не системного пользователя выполнить ряд комманд.

Код:
 
awk -F: '($3 >= 1000) && ($3<60000) && ($1!="nobody") { print $1 }' /etc/passwd | while read -r user; do
    [[ $user = "#"* || ! "$user" ]] && continue
    cp -a -p "/home/root.sto" "home/$user/stores"
    chown -R "$user:$user" "home/$user/stores"
    usermod -a -G test "$user"
done
 

Всего записей: 79 | Зарегистр. 09-12-2004 | Отправлено: 14:27 06-09-2024 | Исправлено: tirex2k, 15:26 09-09-2024
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru