Коментуючи рядок у сценарії Bash на основі змінної


0

Я не програміст і намагаюся зробити свій перший сценарій.

У мене є:

# NOMBREX1:lalalala
# NOMBREX2:0

if [ "$NOMBREX2" == "0" ]; 
    then ??????
fi
$COMMENT1 rar a -r .........

Якщо NOMBREX2=0я хочу перейменувати $COMMENT1на, #щоб прокоментувати цей рядок.

Як я можу це зробити?


Простіше кажучи: ви не можете коментувати рядок у сценарії, змінюючи значення $COMMENT1. Якби в сценарії був коментар, Баш навіть не прочитав би його. Якщо ви змінили рядок #на початок, це не коментар, а все ж рядок, щойно починається з #.
slhck

@slhck Строго кажучи цілком правдиво, але я все ще думаю, що те, що намагається досягти ОП, насправді не коментування, а скоріше умовне виконання. (Також заснований на першій мові ОП, явно не є англійською.) Я думаю, що ми це дізнаємось. :)
CVn

@ MichaelKjörling Так, звичайно, ОП взагалі використовує неправильний підхід - ваша відповідь чудова - але я просто пояснював, чому цей конкретний метод не працює.
slhck

Ви маєте рацію, вибачте за мою погану англійську мову, моє запитання недостатньо добре побудоване. Дякую обом за ваш час, відповідь два працює для мене.
trugulum

@ user331968 Погане розуміння англійської мови зазвичай не є проблемою. Поки намір зрозумілий, якщо він когось достатньо заважає, вони прийдуть і виправлять це. Зосередьтеся на конструктивному дописі, щоб зробити публікацію максимально добре написаною, а тим більше, щоб бути максимально конкретним щодо вашої кінцевої мети та того, що ви намагалися, перш ніж запитувати.
CVn

Відповіді:


4

У вас уже є всі необхідні вам будівельні блоки, вам просто потрібно змінити логіку (і виправити невелику синтаксичну помилку).

Спочатку трохи тла. [є (в основному) псевдонімом test. Багато з цього можна знайти (у шматочках та шматочках) на тестовій (1) сторінці людини; незважаючи на те, що вивчити синтаксис для всього, мабуть, не практично, особливо для початку, я рекомендую ознайомитись із тим, що testможе робити.

Якщо я правильно розумію ваше запитання, ви хочете виконати rarкоманду, якщо і лише тоді, якщо $NOMBREX2 вона не дорівнює "0".

testмає багато умовних операторів, у тому числі =("рядки рівні") та !=("рядки не рівні"). Зауважте, що цілі значення використовують різні оператори, включаючи -eqі, -neвідповідно. Чому це зроблено таким чином, поза мною, але це вже вода під мостом.

У bash є два способи запускати команду, якщо оператор оцінюється як true, або точніше, якщо команда повертає нульовий статус виходу; або вкладіть його в if ...; then .. fiблок, або використовуйте &&оператор для розділення команд. Ви можете зробити те ж саме, якщо хочете виконати команду, коли оператор оцінюється як false (повертає ненульовий статус виходу); if ! ...; then ... fi( !означає "не") або використовувати ||між командами.

Оскільки ми вже знаємо, що умова, яку ви хочете виконати для rarкоманди, є порівнянням нерівності, ми можемо записати це двома різними способами (якщо припустити, що ви хочете порівняння рядків; інакше замість !=використання -neв умовах):

Варіант 1 (ідіоматичний, підходить для простих умов та окремих команд):

test "$NOMBREX2" != "0" && rar a -r ...

Варіант 2 (підходить для більш складних умов або декількох команд):

if [ "$NOMBREX2" != "0" ]; then
    rar a -r ...
    # ... anything else goes here ...
fi

Ну, я на роботі, але зробив швидкий тест з варіантом 2 і працює чудово. <br/> Я буду вивчати параметр тесту, щоб дізнатися про нього більше. <br/> Дякую за допомогу та час, я дуже noob з цим, і це допомагає мені зрозуміти код. <br/> Дякую.
trugulum

@ user331968 Радий, що мені вдалося допомогти. Будь ласка, розглянути питання про схвалення та прийняття цієї відповіді, якщо ви вважаєте, що вона вирішила вашу проблему. Оновлення корисних відповідей та прийняття тієї, яка допомогла вам найбільше вирішити вашу конкретну проблему - це звичайний спосіб сказати спасибі в мережі Stack Exchange, а прийнята відповідь на запитання вказує громаді, що ви вважаєте, що проблема вирішена. на ваше задоволення.
CVn

Вибачте, але це моя перша публікація тут, і я не поцікавився репутацією рекламних пропозицій. Дякую ще раз, зараз ідеально працює.
trugulum

@ user331968 Продовжуйте робити конструктивні внески, і незабаром ви заробите цю репутацію. Я теж почав з 1 реп. Ласкаво просимо до обміну стеками та Super User.
CVn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.