sed не заменяет последовательно -отказ на*

Вы можете обернуть сценарий оболочки вокруг ssh, но сам sshэтого не сделает.

Одним из способов использования функции bash является (, помещенный в~/.bashrc):

function ssh() { command ssh -p 22 "$@" || command ssh -p 5492 "$@"; }

Кстати, рекомендуется использоватьroot-зарезервированные порты для системных служб, таких как ssh, чтобы у пользователей не было процесса, который прослушивает, скажем, порт 5492. В противном случае они могут играть в человека посередине и, возможно, захватить данные для входа. Итак, используйте порт

1
18.12.2020, 12:14
1 ответ

Решение, использующее только bashбез необходимости внешних команд

#!/bin/bash
newstring='6 + 6 * 9'

read -a atoms <<<"$newstring"
run=${atoms[0]}               # Initialise running total to the first value

for ((i=1; i<=${#atoms[@]}; i+=2))
do
    op=${atoms[$i]}           # Next operator
    num=${atoms[$((i+1))]}    # Next number
    run=$((run $op num))      # Perform the arithmetic (integer maths)
done
echo "$run"

Если вы хотите использовать плавающую арифметику, вам нужно будет использовать bcили dc. В этом варианте используется dc, как предложено в комментарии

.
#!/bin/bash
newstring='6.5 + 6 * 9'

{
    read -a atoms <<<"$newstring"

    run=${atoms[0]}
    printf "%s " "$run"

    for ((i=1; i<=${#atoms[@]}; i+=2))
    do
        op=${atoms[$i]} num=${atoms[$((i+1))]}
        printf " %s %s" "$num" "$op"
    done
    printf " p\n"
} | dc
3
18.03.2021, 22:42

Теги

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