Я нахожусь в процессе понимания сценариев оболочки — это мой простой код для добавления тестовых файлов для Python модульный тест
Я ищу указатели на передовой опыт, имена переменных и, конечно, комментарии по структуре и удобочитаемости.
EDIT: скрипт вызывается, например
./create_tests.sh math tensor_add
dir_name="$1"
file_name="$2"
test_dir="test/${dir_name}"
file_in_dir="${test_dir}/${file_name}.py"
addFile() {
if [[ -f "${file_in_dir}" ]]
then
echo "File already exists in directory, exiting."
exit 0
else
touch "${file_in_dir}"
fi
}
if [[ -d "${test_dir}" ]]
then
echo "Directory already exists, adding the file to this directory."
addFile
else
echo "Directory and __init__.py created."
mkdir "${test_dir}"
touch "${test_dir}/__init__.py"
addFile
fi
1 ответ
- Добавьте шебанг.
- Продолжайте давать названия, я лично предпочитаю и следую Руководство по стилю Google; вы можете использовать другое руководство, если оно есть.
- Попробуйте сделать свой скрипт совместимым с POSIX для более широкого охвата цели (не нужно полагаться на
[[
expression from bash) - Define a function to create the test directory.
- Use shellcheck.
- The
echo "Directory and __init__.py created."
should happen after the creation has happened. - Use
mkdir -p
to allow for nested directories to also be created (if needed). - Let script throw error and stop as early as possible on errors. This is achieved with
set -e
.
Together:
#!/bin/sh
set -e
dir_name="$1"
file_name="$2"
test_dir="test/${dir_name}"
file_in_dir="${test_dir}/${file_name}.py"
add_file() {
if test -f "${file_in_dir}"
then
echo "File already exists in directory, exiting."
exit 0
else
touch "${file_in_dir}"
fi
}
create_dir() {
mkdir -p "${test_dir}"
touch "${test_dir}/__init__.py"
echo "Directory and __init__.py created."
}
[ ! -d "${test_dir}" ] && create_dir "$ {test_dir}" add_file
Фрагмент объявлений переменных (dir_name
, file_name
и т. д.) также могут быть локализованы для функций.
Вы пропустили «извлечь общие строки из
if
/else
«из списка — хотя вы продемонстрировали это в своем переработанном коде.— Тоби Спейт
Спасибо за отличный совет. Один вопрос: в чем разница между двойными скобками и одинарными скобками в моей реализации против вашей? Связано ли это с соответствием POSIX?
— Эдвин Карлссон
stackoverflow.com/q/669452/2002471 объясняет, почему двойные скобки — это хорошо. Стремление к совместимости с POSIX после того, как bash и Linux захватили мир, — это интересный приоритет. Я надеюсь, что читаемость кода и ремонтопригодность в наши дни важнее. Исходя из
if [[
кif test
имеет смысл для людей, которые понимают, как работает оболочка if, но я бы сказал, что это делает ее менее читаемой и интуитивно понятной для большинства людей.— цыплята