Bash,无争议警告和案例决策

Ope*_*way 97 bash

我在学习bash.

我想做一个简单的脚本,当没有给出参数时,会显示一些消息.当我把numers作为参数时,s取决于值,它会做一件事或另一件事.

我还想知道关于bash初学者最好的在线手册的建议

谢谢

Tho*_*mas 153

if [[ $# -eq 0 ]] ; then
    echo 'some message'
    exit 0
fi

case "$1" in
    1) echo 'you gave 1' ;;
    *) echo 'you gave something else' ;;
esac
Run Code Online (Sandbox Code Playgroud)

高级Bash脚本编程指南是相当不错的.尽管它的名字,它确实对待基础知识.

  • 如果你认为一个缺失的参数有些不好(比如脚本无法成功执行),则返回不同于0的东西(`exit 1`).有关返回/退出代码的更多约定,您可以在线快速找到,但重要的是它不应该是0,这表示成功. (4认同)

Pat*_*Pat 20

如果只想丢失一个特定的参数而对bailing感兴趣,参数替换很棒:

#!/bin/bash
# usage-message.sh

: ${1?"Usage: $0 ARGUMENT"}
#  Script exits here if command-line parameter absent,
#+ with following error message.
#    usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
Run Code Online (Sandbox Code Playgroud)


Tra*_*irk 10

 if [ -z "$*" ]; then echo "No args"; fi
Run Code Online (Sandbox Code Playgroud)

结果

No args
Run Code Online (Sandbox Code Playgroud)

细节

-z是字符串长度为零的一元运算符. $*都是争论.引号用于安全性并封装多个参数(如果存在).

对于像这样的更多运营商,使用man bash和搜索(/ key)"一元".

  • 这个问题的一个(次要)问题是它不区分传递任何参数和传递空字符串作为参数.在某些情况下,这可能很重要.使用[$#-eq 0]可以正确处理这两种情况. (7认同)
  • 啊,(ba)sh 编程的微妙之处……这就是我讨厌它的原因。 (2认同)
  • 将 `-z` 视为_mizzing_ (2认同)