Итак, первая подсказка в коде - это оператор return
. Это означает, что вас, вероятно, просят написать функцию, которая, учитывая некоторые value
, проверяет, не превышает ли это значение 5
.
Давайте определим его, используя ваш существующий код:
function isGreaterThan5(value) {
let greaterThan5 = false;
if (value > 5 ) {
console.log("That is true");
}
return greaterThan5;
}
Итак, сейчас мы всегда собираемся вернуть false
. Все, что вам нужно сделать, это переназначить значение greaterThanFive
, если value > 5
. Итак, вы можете просто сделать это в своем операторе if:
function isGreaterThan5(value) {
let greaterThan5 = false;
if (value > 5 ) {
greaterThan5 = true;
}
return greaterThan5;
}
Теперь вы можете проверить свой код, вызвав функцию с различными значениями:
isGreaterThan5(1); // returns false
isGreaterThan5(5); // returns false
isGreaterThan5(6); // returns true
И мы закончили !
Мне интересно, что вас смутило использование let
. Возможно, вы захотите прочитать больше о var
, let
и const
.
Просто не помещайте целые команды в переменные. Вы получите много хлопот, пытаясь восстановить указанные в кавычках аргументы.
Также:
#! /bin/bash
if [ $# -ne 2 ]
then
echo "Usage: $(basename $0) DIRECTORY BACKUP_DIRECTORY"
exit 1
fi
directory=$1
backup_directory=$2
current_date=$(date +%Y-%m-%dT%H-%M-%S)
backup_file="${backup_directory}/${current_date}.backup"
tar cv "$directory" | openssl des3 -salt | split -b 1024m - "$backup_file"
Я не уверен, но, возможно, стоит сначала запустить eval для команд.
Это позволит bash развернуть переменные $ TAR_CMD и тому подобное до их полной ширины (так же, как Команда echo работает с консолью, что, как вы говорите, работает)
Затем Bash во второй раз прочитает строку с развернутыми переменными.
eval $TAR_CMD | $ENCRYPT_CMD | $SPLIT_CMD
Я только что выполнил поиск в Google, и эта страница выглядит так, как будто она может справиться с задачей. объясняя, зачем это нужно. http://fvue.nl/wiki/Bash:_Why_use_eval_with_variable_expansion%3F
Есть смысл помещать команды и параметры только в переменные.
#! /bin/bash
if [ $# -ne 2 ]
then
echo "Usage: `basename $0` DIRECTORY BACKUP_DIRECTORY"
exit 1
fi
. standard_tools
directory=$1
backup_directory=$2
current_date=$(date +%Y-%m-%dT%H-%M-%S)
backup_file="${backup_directory}/${current_date}.backup"
${tar_create} "${directory}" | ${openssl} | ${split_1024} "$backup_file"
Вы можете переместить команды в другой исходный файл, чтобы вы могли повторно использовать одни и те же команды и параметры во многих сценариях. Это очень удобно, когда у вас много сценариев, и вы хотите контролировать, как все они используют инструменты. Поэтому standard_tools будет содержать:
export tar_create="tar cv"
export openssl="openssl des3 -salt"
export split_1024="split -b 1024m -"
Цитировать пробелы внутри переменных так, чтобы оболочка правильно интерпретировала их, сложно . Именно этот тип вещей побуждает меня стремиться к более сильному языку. Будь то Perl, Python, Ruby или что-то еще (я выбираю Perl, но это не всегда для всех), это просто что-то , которое позволит вам обойти оболочку для цитирования.
Это не так, что я » нам никогда не удавалось сделать это правильно с либеральными дозами eval, но только этот eval дает мне eebie-jeebies (становится совершенно новой головной болью, когда вы хотите принять пользовательский ввод и оценить его, хотя в этом случае вы будете брать вещи что вы написали и оценили это вместо этого), и что у меня начались головные боли при отладке.
С perl, как мой пример, я смог бы сделать что-то вроде:
@tar_cmd = ( qw(tar cv), $directory );
@encrypt_cmd = ( qw(openssl des3 -salt) );
@split_cmd = ( qw(split -b 1024m -), $backup_file );
Трудная часть здесь - это создание каналов, но немного IO :: Pipe , разветвление и повторное открытие stdout и stderr, и это неплохо. Кто-то скажет, что это хуже, чем правильно цитировать оболочку, и я понимаю, откуда они берутся, но для меня это легче читать, поддерживать и писать. Черт возьми, кто-то может взять тяжелую работу из этого и создать модуль IO :: Pipeline и сделать все это тривиальным; -)