Невозможно сравнить строки

Google не помог мне.

#!/bin/sh j1=`expr "$1"` j2=`expr "$2"` while [ $j1 -le $j2 ]; do date=$(ncal -e $j1) month=$($date | cut -f1 -d' ') if [ $month=="April" ]; then echo $date fi j1=`expr $j1 + 1` done 

Я хочу напечатать дату Пасхи только в те годы, когда она находится в апреле месяца (в диапазоне между двумя годами, которые я передал в качестве аргументов). Но почему-то я получаю вывод:

 April 5 2015 ./script.sh: 8: March: not found March 27 2016 ./script.sh: 8: April: not found April 16 2017 

Что означает «месяц: не найден»? И почему он печатает март, хотя я только прошу об апреле?

Я пробовал его разными способами, и всегда была какая-то ошибка.

Мне также нужно добавить условие, что печатаются только те даты, которые находятся за пределами 20-го апреля, но я даже не в состоянии справиться с этим.

One Solution collect form web for “Невозможно сравнить строки”

На линии

 month=$($date | cut -f1 -d' ') 

вы выполняете все, что есть в $date в качестве команды и cut свой вывод.

Я думаю, ты хочешь

 month=$( printf '%s\n' "$date" | cut -f 1 -d ' ' ) 

Вот.

Кроме того, не смешивайте backticks и $(...) в одном скрипте, это запутывает. Просто используйте $(...) вместо этого.

Сравнение строк выполняется с помощью::

 if [ "$month" = "April" ]; then 

Обязательно дважды указывайте свои переменные. См. « Последствия безопасности» для забывания, чтобы процитировать переменную в оболочках bash / POSIX

Целочисленную арифметику можно выполнить с помощью $(( expression )) . expr устаревает.

 j1=$(( "$1" )) j2=$(( "$2" )) ... j1=$(( j1 + 1 )) 
  • bashscript для нажатия клавиши со стрелкой вправо
  • Генерация случайных чисел в Solaris?
  • grep a awk string из файла и записать в другую часть файла строки
  • строковые манипуляции без awk или sed
  • Какой самый простой способ найти неиспользуемый локальный порт?
  • bash: проверьте, находится ли переменная в
  • Команда ведет себя по-разному при сохранении в файле * .sh
  • Обновление файла / etc / sudoers в bash
  • Функциональность Copytruncate без использования logrotate
  • Могу ли я поставить более одного условия, если?
  • Как мне перебрать вывод из shuf?
  • Interesting Posts

    MySQL отказывается удалить

    Использование nmcli для установки маски подсети и IP-адреса шлюза

    «Avahi-daemon : server.c: слишком короткий или недопустимый пакет при чтении записи ответа. (Может быть, проблема UTF-8?) "

    Как я могу понять, что мешает монтированию привязки отключиться?

    как я могу вызвать скрипт bash из сценария init.d?

    Использование in / out именованных каналов для TCP-соединения

    Debian partial Mirror – зеркальное отображение «debparial-mirror»

    Быстрое форматирование USB-флеш-памяти под KDE

    конвертировать вывод iscord в flac

    mv не удалось на полпути – исходный каталог неповрежден

    Как расширить linux-раздел с? (После успешного продления: не загружать компьютер)

    apt-get не может найти пакет на старой версии моего дистрибутива

    Заполнение rsyslog / var / log ставит систему вниз

    Неправильная раскладка клавиатуры с использованием Synergy и i3

    Внутри fakeroot, почему chown возвращает EPERM, даже если это удается (но опять же это не так)?

    Linux и Unix - лучшая ОС в мире.