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

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

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

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

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

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

 [name]=[System time timestamp1] 

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

  • Поиск строки в файлах рекурсивно в BusyBox 1.0?
  • Что такое IFS в контексте цикла?
  • Похоже, что некоторые основы отсутствуют в ubuntu ... или я их не установил?
  • Передайте команду ROOT из сценария оболочки и оставив ее открытой
  • Есть ли один слой, который позволяет мне создавать каталог и перемещаться в него одновременно?
  • Как использовать $? и тест для проверки функции?
  • Перепутал файл bash.bashrc, команды больше не работают
  • Может ли файл .bash_profile быть автоматически получен после изменения?
  • 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
    Linux и Unix - лучшая ОС в мире.