获取存储在变量中的命令行参数

Getting command line argument that stores in a variable

我正在编写一个 bash 脚本来获取用户信息的前三行。

例如:

$ ./c.sh bob unknown
Login: bob                           Name: Bob
Directory: /u1/h7/bob                Shell: /bin/tcsh
Office: AA 044, x8361                   Home Phone: 000-000-0000

unknown: no such user.

到目前为止,这是我的代码

#!/bin/bash

if [ $# == 0 ]; then
  echo "Usage: ./c.sh Login/Username"
  exit
else
  i=$#
  j=1
  while [ "$j" -le "$i" ]; do
    finger ${$j} | head -n+3
    echo
    j=$(($j+1))
  done
fi

${$j} 没有给出命令行参数的用户类型,而是给出了 $j 的值,关于如何获得 login/username 的任何建议和帮助?我试过 $($j), $((j)), ${$j}....

简单的答案:停止使用不必要的间接寻址:

#!/bin/bash
if (( $# == 0 )); then
  echo "Usage: ./c.sh Login/Username"
  exit
else
  while [[  ]]; do
    finger "" | head -n+3
    echo
    shift
  done
fi

或者……

…
for user; do # equivalent to `for user in "$@"; do`
  finger "$user" | head -n+3
  …
done

可以这样写:

i=$#
j=1
while [ $j -le $i ]; do
  finger "${@:j++:1}" | head -n+3
  echo
done

…但你不需要那么努力。

#!/bin/bash
if [[ $# -eq 0 ]]; then
    echo "Usage: [=10=] Login/Username"
    exit
else
    for ARG in "$@"; do
        finger "$ARG" | head -n 3
        echo # If you want a newline
    done
fi

越简单越好。