Скрипт for loop linux [закрыт]

Отредактируйте файл /boot/loader.conf, добавив следующие строки:

if_rum_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"
wlan_xauth_load="YES"

Отредактируйте файл etc/rc.conf, добавьте следующее строки:

wlans_rum0="wlan0"

Отредактируйте файл /etc/wpa_supplicant.conf следующим образом:

network={
ssid="your_ssid"
psk="your_password"
}

Создайте сеть:

ifconfig wlan create wlandev rum0

Статический IP-адрес

Чтобы настроить статический IP-адрес, вы должны удалить запись DHCP из /etc/rc.conf, а затем запустить следующую команду:

wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
ifconfig wlan0 inet 10.150.1.41 netmask 255.255.255.0
route add default your_default_router
echo "nameserver your_DNS_server" >> /etc/resolv.conf

DHCP

Чтобы получить IP через DHCP, вы должны добавить ifconfig_wlan0="WPA DHCP" в ваш файл /etc/rc.conf:

echo 'ifconfig_wlan0="WPA DHCP"' >> /etc/rc.conf
1
27.11.2018, 15:54
2 ответа

Не обращая внимания на инструкции и делая это по моему собственному разумению (инструкции в любом случае являются поддельными, поскольку нет необходимости спрашивать у пользователя количество баллов (точка 1 ), если они все равно должны быть подсчитаны (пункт 4 )).

awk 'BEGIN              { printf("Enter scores, one per line, end with Ctrl+D\n") }
     $1 < 1 || $1 > 100 { printf("Invalid score, must be [1,100]\n"); next }
                        { sum += $1; n++ }
     END                { printf("Average: %.2f\n", sum/n) }'

Тестирование:

Enter scores, one per line, end with Ctrl+D
0
Invalid score, must be [1,100]
2
3
4
5
99
100
1001
Invalid score, must be [1,100]
Average: 35.50

Это упростило бы чтение результатов из файла, просто используя перенаправление в скрипт awk.

То же самое в /bin/sh(, но не обрабатывает не -целочисленный ввод/результат):

#!/bin/sh

echo 'Enter scores, one per line, end with Ctrl+D'
while read score; do
    if [ "$score" -lt 1 ] || [ "$score" -gt 100 ]; then
        echo 'Invalid score, must be [1,100]'
    else
        sum=$(( sum + score ))
        n=$(( n + 1 ))
    fi
done

printf 'Average: %d\n' "$(( sum / n ))"

Если вы настаиваете на количестве баллов, вам придется по-другому обрабатывать баллы вне допустимого диапазона:

#!/bin/sh

printf 'Enter the number of scores that you will enter: ' >&2
read nscores

while [ "$nscores" -gt 0 ]; do
    while true; do
        read score
        if [ "$score" -lt 1 ] || [ "$score" -gt 100 ]; then
            echo 'Invalid score, must be [1,100]'
        else
            break
        fi
    done

    sum=$(( sum + score ))
    n=$(( n + 1 ))

    nscores=$(( nscores - 1 ))
done

printf 'Average: %d\n' "$(( sum / n ))"

К сожалению, еще один цикл while.

Цикл forв сценариях оболочки используется только для явного списка, такого как список имен файлов. Использование цикла forв этом упражнении, если вы пишете сценарий оболочки для его решения, вовсе не обязательно.

Разумный вариант использования, когда для решения этого упражнения можно использовать цикл for:

#!/bin/sh

for score do
    if [ "$score" -lt 1 ] || [ "$score" -gt 100 ]; then
        printf 'Invalid score (%d), must be [1,100]\n' "$score" >&2
    else
        sum=$(( sum + score ))
        n=$(( n + 1 ))
    fi
done

printf 'Average: %d\n' "$(( sum / n ))"

Этот скрипт будет принимать баллы в командной строке:

$ sh./script.sh 1 20 10 22 3001 20
Invalid score (3001), must be [1,100]
Average: 14

Поскольку список оценок является статическим списком, целесообразно перебирать его с помощью цикла for.

0
28.01.2020, 00:23

Я вижу, вы уже приняли ответ, но я представлю несколько иную точку зрения. Если вам нужно перебрать целые числа в скрипте bash, вы можете использовать seqТип

$ man seq

в консоли и прочитайте, как это работает.

Пример однострочника:

$ for i in $(seq 1 10); do echo $i; done
1
2
3
4
5
6
7
8
9
10

вместо echo $iу вас будет просто логика для вашей задачи

0
28.01.2020, 00:23

Теги

Похожие вопросы