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

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 )) 
  • Сценарий оболочки для поиска и замены значения из файла csv
  • Создание сценария оболочки внутри текстового редактора
  • Добавление записей в массив внутри цикла
  • Передача параметра одиночной кавычки
  • Предотвращение уже запущенного процесса для записи в существующий файл
  • Логический И в сценарии bash
  • проанализировать одно поле из массива JSON в массив bash
  • Команда Ubuntu runuser?
  • Проверьте, нет ли часов на машинах, где я могу только отправлять задания
  • получить имя нового каталога, созданного из команды tar
  • Дождитесь завершения процесса, прежде чем перейти к следующей строке в сценарии оболочки
  • надежный код возврата фонового процесса
  • Linux и Unix - лучшая ОС в мире.