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

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

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

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

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

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

 [name]=[System time timestamp1] 

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

  • Измените несколько файлов в разных папках одной командой?
  • Как связать команду оболочки с не-дочерним процессом, выходящим без состояния гонки?
  • Как переключиться на другой экран для запуска git-команд при разрешении конфликтов (команда блокировки)?
  • Что такое альтернатива командной строке для поиска текущего использования ЦП, не зависящего от ширины экрана?
  • Как удалить часть двоичного файла без копирования
  • Экспорт функции из .profile / .bashrc
  • Печать информации автозаполнения текущей опции в рыбной раковине
  • Что регулирует пределы расширения скобки оболочки?
  • 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 
    Interesting Posts

    Есть ли какая-либо командная строка, общий HTTP-прокси (например, Squid)?

    Тест, если команда принимает конкретную опцию

    Is -X избыточно, если -Y также указано при запуске ssh?

    openldap Fedora 22 – apple.schema и теперь для секции монтирования

    Как получить pid подпроцесса из самого подпроцесса

    Grep для строки в первой строке всех файлов в каталоге и потомках

    Как найти функцию zsh, связанную с виджетами zle?

    Как Linux загружает образ initrd?

    feh: одновременные режимы слайд-шоу и монтажа

    Как установить более свежие версии программного обеспечения, чем то, что предоставляет Debian?

    mpg321 играет слишком быстро, на высокой высоте, через USB Audio

    Как я могу проинструктировать BSD sed интерпретировать escape-последовательности, такие как \ n и \ t?

    Может ли ALSA выводить звук с входной линии гнезда материнской платы на HDMI?

    Как ЦП знает, какой физический адрес сопоставляется с каким виртуальным адресом?

    sudo: ошибка синтаксического анализа в / etc / sudoers около строки 27

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