Передавать аргументы командной строки скрипту bash

Я новичок в программировании сценариев bash.

Я хочу реализовать bash-скрипт «deploymLog», который принимает в качестве входного одного строкового аргумента (имя).

[root@localhost Desktop]# ./deploymLog.sh name 

здесь я хочу передать строковый аргумент (имя) через командную строку

В качестве начального шага мне нужно добавить текущую Logone.txt метку вместе с этой входной строкой в ​​файл журнала, например Logone.txt в текущем каталоге в следующем формате:

 [name]=[System time timestamp1] 

Как это возможно?

3 Solutions collect form web for “Передавать аргументы командной строки скрипту bash”

 $> cat ./deploymLog.sh #!/bin/bash name=$1 log_file="Logone.txt" if [[ -n "$name" ]]; then echo "$1=$( date +%s )" >> ${log_file} else echo "argument error" fi 

Первый аргумент из командной строки может быть основан на $1 . date +%s возвращает текущую временную метку во время unix. >> является оператором добавления записи в файл.

 $> ./deploymLog.sh tt $> cat Logone.txt tt=1329810941 $> ./deploymLog.sh rr $> cat Logone.txt tt=1329810941 rr=1329810953 

Для более читаемой временной метки вы можете играть с аргументами date .

Аргументы командной строки командной строки доступны через $1 (первый), $n (n) или $* (все аргументы), поэтому ваш скрипт должен начинаться:

 #!/bin/bash if [ $# -ne 1 ]; then echo $0: usage: myscript name exit 1 fi name=$1 

Теперь аргумент name доступен из сценария как $name .

Чтобы получить метку времени, используйте команду date(1) и дайте ей спецификатор формата, чтобы он выдавал желаемый формат:

 now=$(date +%Y%m%d%H%M%S) 

Теперь $now содержит текущую дату и время.

Таким образом, вы можете создать файл журнала таким образом:

 logfile=/path/to/log/file/mylogfile.$now echo "[$name]=[$now]" >> $logfile в logfile=/path/to/log/file/mylogfile.$now echo "[$name]=[$now]" >> $logfile 

Вам лучше использовать функцию оболочки для регистрации ваших сообщений, поскольку она будет проще в использовании:

 function logit { now=$(date +%Y%m%d%H%M%S) echo "$now: $*" >> $logfile } 

Обратите внимание, что функции оболочки получают доступ к своим собственным аргументам так же, как сценарий (через $1 и т. Д.),

Итак, исходный скрипт выглядит так:

 #!/bin/bash function logit { now=$(date +%Y%m%d%H%M%S) echo "$now: $*" >> $logfile } if [ $# -ne 1 ]; then echo $0: usage: myscript name exit 1 fi name=$1 now=$(date +%Y%m%d%H%M%S) logfile=/path/to/log/file/mylogfile.$now logit name = $name в #!/bin/bash function logit { now=$(date +%Y%m%d%H%M%S) echo "$now: $*" >> $logfile } if [ $# -ne 1 ]; then echo $0: usage: myscript name exit 1 fi name=$1 now=$(date +%Y%m%d%H%M%S) logfile=/path/to/log/file/mylogfile.$now logit name = $name 

(обратите внимание, что файл журнала не находится в точном формате, который вы указали, он находится в лучшем с меткой времени в начале каждой строки).

 #!/bin/bash name=$1 echo "$(date '+%Y%m%d-%H:%M:%S') => " $name >> x.log 

запустите «bash deploymLog.sh независимо», и вы получили x.log с

 20120220-23:53:50 => whatever 
  • Как узнать процесс (ы), который вилки много?
  • Как удалить все файлы с заданным именем во всех подкаталогах?
  • Создание ярлыков / псевдонимов в Fedora
  • cat в stdin, тогда труба в программу держит раздвоенную оболочку открытой, почему?
  • Как ввести тайм-аут для сценариев оболочки?
  • Захват символической ссылки в переменные Unix / Linux
  • Удаление повторяющихся слов между скобками inline
  • исходный скрипт как команда
  • массовое переименование (или корректное отображение) файлов со специальными символами
  • Последняя неудачная команда в bash
  • Bash, если условия переменных в пределах интервалов
  • Interesting Posts

    «Настойчивость» замедляет загрузку и завершение работы на USB-Linux?

    CentOS 6.5: машина с более чем 1 ТБ ОЗУ => «бесплатные страницы не доступны» при загрузке

    Безопасно ли перемещать файл, к которому добавляется?

    Могу ли я использовать `rm` только при использовании globbing? (либо в bash, либо в zsh, либо в обоих)

    Перенос PCI: vfio-pci игнорирует идентификаторы устройств

    USB-накопитель отключен в dmesg и? в ls, но только для некоторых файлов?

    Как извлечь текст с помощью sed

    Почему мой процессор никогда не получает 60-70% использования процессора? Где узкое место?

    Разрешить setuid для сценариев оболочки

    Как установить путь в среде без оболочки (KDE)?

    Разница между `info` и` pinfo`

    Как запланировать первоначальную настройку системы после клонирования?

    Как сделать открытые файлы более 2000000?

    перенаправление вывода команды, как если бы это был входной файл

    Как я могу автоматизировать отправку почты с помощью скрипта?

    Linux и Unix - лучшая ОС в мире.