在Linux中运行没有命令行参数的Shell脚本

时间:2017-04-02 17:36:58

标签: linux bash shell while-loop

我正在尝试运行一个Shell脚本,但遇到了问题。我希望在提供参数时运行某些代码集,如果我不传递任何参数,则应该运行剩余的代码。 我想用args运行的部分:

#!/bin/bash
while [[ "$1" != "" ]]; do
case "$1" in
    -c )  cat /proc/cpuinfo | grep cores
          ;;
    -d )  fdisk -l | grep Disk  | awk '{print $1,$2,$3,$4}' #fdisk -l 2> /dev/null | grep Disk | grep -v identifier
          ;;
    esac
 shift
done

此部分没有任何参数

while [[ $# -eq 0 ]]; do
echo PART 2 $#
cat /proc/cpuinfo | grep cores
fdisk -l | grep Disk  | awk '{print $1,$2,$3,$4}' #fdisk -l 2> /dev/null | grep Disk | grep -v identifier
break
done

我认为问题与Loop条件有关,但我不明白是什么?

1 个答案:

答案 0 :(得分:1)

if [[ -n "$1" ]]; then
  #
  # "$1" is not empty. This is the part which runs when one or more
  # arguments are supplied.
  #
  while [[ -n "$1" ]]; do
    case "$1" in
    -c) cat /proc/cpuinfo | grep cores
        ;;
    -d) LC_ALL=C fdisk -l | grep Disk  | awk '{print $1,$2,$3,$4}'
        #LC_ALL=C fdisk -l 2> /dev/null | grep Disk | grep -v identifier
        ;;
    esac
  shift
  done
  exit
fi
#
# "$1" is empty. The following code runs when no arguments are supplied.
#
echo PART 2 $#
cat /proc/cpuinfo | grep cores
LC_ALL=C fdisk -l | grep Disk | awk '{print $1,$2,$3,$4}'
#LC_ALL=C fdisk -l 2> /dev/null | grep Disk | grep -v identifier

注1:未经测试。

注意2:每当您觉得需要解析查找某些单词或短语的命令输出时,最好在默认语言环境中使用LC_ALL=C作为前缀来运行该命令。通过这种方式,您在法语区域设置中不会感到惊讶,例如,fdiskDisque ...