Как передать аргументы функции в сценарии bash? [дубликат]

В случае Redis он также выдает предупреждение, предлагающее отключить THP. Но, как отмечено в отчете об ошибке , во многих дистрибутивах /etc/rc.local выполняется после служб и не влияет на них, пока они не перезапустятся. Также обратите внимание, что в виртуализированных средах (например, Digitalocean) вы не можете управлять настройками GRUB.

В этом случае решением является использование специального сценария init для отключения прозрачных огромных страниц , как эта страница предлагает, с помощью настроек X-Start- До . Например, сценарий Debian init для Redis:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          disable-thp
# Required-Start:    $local_fs
# Required-Stop:
# X-Start-Before:    redis-server
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Disable THP
# Description:       disables Transparent Huge Pages (THP) on boot
### END INIT INFO

case $1 in
start)
  if [ -d /sys/kernel/mm/transparent_hugepage ]; then
    echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
    echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
  else
    return 0
  fi
;;
esac 

6
12.04.2018, 17:14
2 ответа

Вы запускаете функцию addition_exampleбез аргументов. Следовательно, переменные $1и $2пусты, и на самом деле вы выполняете просто result = $((+)). Это дает именно ту ошибку, которую вы упомянули:

$ result = $((+))
bash: +: syntax error: operand expected (error token is "+")

Когда вы запускаете source script_name.sh 20 20, оболочка будет источником script_name.sh, передавая его 20и 20в качестве аргументов. Однако script_name.shна самом деле не содержит никаких команд, в нем есть только объявление функции. Поэтому аргументы игнорируются. Затем в следующей команде вы запускаете addition_example, но без аргументов, поэтому вы получаете ошибку, описанную выше.

Кроме того, у вас есть синтаксическая ошибка. У вас не может быть пробелов вокруг оператора присваивания(=)в сценариях оболочки. Вы должны изменить свой скрипт на:

function addition_example(){
    result=$(($1+$2))
    echo "Addition of the supplied arguments = $result"
}

А затем запустить функцию с нужными аргументами:

$ source script_name.sh; addition_example 20 20
Addition of the supplied arguments = 40
13
27.01.2020, 20:20

У вас есть несколько незначительных проблем с кодом.

Попробуйте это:

#!/bin/bash

function addition_example(){
    local num1=$1
    local num2=$2
    local result=$((num1+num2))
    echo "Addition of the supplied arguments = $result"
}
addition_example "$1" "$2"
  • Функция была объявлена ​​в сценарии, но при простом выполнении сценария функция не выполнялась.
  • Аргументы, переданные сценарию (в качестве позиционных параметров ), не будут переданы функции, если они не указаны.
  • Вы не можете использовать пробелы вокруг =при назначении переменной с помощью bash
  • Ваш оператор echoдолжен быть заключен в кавычки, любая переменная должна быть заключена в кавычки.
7
27.01.2020, 20:20

Теги

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