Отредактируйте файл /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 ), если они все равно должны быть подсчитаны (пункт 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
.
Я вижу, вы уже приняли ответ, но я представлю несколько иную точку зрения. Если вам нужно перебрать целые числа в скрипте 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
у вас будет просто логика для вашей задачи