Как разобрать строку запроса в bash в оператор if then - PullRequest
0 голосов
/ 25 января 2019

Как я могу использовать bash для сканирования определенной строки символов в текстовом файле, а затем использовать оператор if then для выполнения определенной команды в зависимости от строки?Я пытаюсь использовать rsync для резервного копирования некоторых малиновых пис из строки запроса, выводимой из формы HTML.У меня минимальный опыт работы с bash, и я уже несколько дней копаюсь и подталкиваю этот код, и я хотел бы получить совет.

QUERY_STRING будет содержать что-то похожее на «Backup_To_Comp = tasting-side_backup & subbtn = Submit» с «Tasting»-side_backup "заменяется на другие радиальные теги кнопок, как выбрано.

#!/bin/bash

echo "Content-type: text/html"
echo ""


echo "$QUERY_STRING" > /var/www/cgi-bin/scan.txt

BackupToCompFrom=`echo "$QUERY_STRING" | sed -n 's/^.*Backup_To_Comp=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`

echo "<html><head><title>What You Said</title></head>"

echo "<body>Here's what you said:"
echo "You entered $BackupToCompFrom in from field."

sleep 1

file="/var/www/cgi-bin/scan.txt"
##echo "$QUERY_STRING"
while IFS='' read -r line || [[ -n "$line" ]];
do
    if [[ $line = "tasting-side_backup" ]]; then
    echo "GotIt."
      rsync pi@192.168.1.1:/home/pi/screenly_assets /home/pi/Downloads  
    elif [[ $line = "~tasting-main"* ]]; then
      print "Tasting Main" 
    elif [[ $line = "~lodge"* ]]; then
      print "Lodge" 
    elif [[ $line = "~barn"* ]]; then
      print "Barn" 
        else
      print "Please select a pi to copy from!"
    fi

done 

1 Ответ

0 голосов
/ 26 января 2019

Как я могу использовать bash для сканирования определенной строки символов в текстовом файле, а затем использовать оператор if then для выполнения определенной команды в зависимости от строки?

Вы можете использовать команду в операторе if. Теперь код выхода для этой команды используется для определения истинного или ложного. Для простого поиска запроса к файлу вы можете использовать grep.

if grep -q "$QUERY_STRING" file; then 

-q используется для предотвращения вывода любых результатов grep в stdin.

...