Bash如果块明显不应该运行

Fat*_*oke 0 bash conky

代码:

first=true
mountpoint=" "
partlist=`df -h | grep "^/dev"` # get partition info
for i in $partlist              # loop through info
do
  if [[ ${i:0:1} = "/" ]]       # items starting with / are what I'm interested in
  then
    if [[ $first ]]             # The first instance in each pair is the device name
    then
      mountdev=$i
      mountpoint=" "
      first=false
    else                        # The second instance is the device mount point
      mountpoint=$i
      first=true
    fi
    if [[ $mountpoint != " " ]] # If the mountpoint was just set (last to be set
                                #   before printing config)
    then
      # Print config
      echo "${mountpoint} \${fs_size ${mountpoint}"
      echo "USED \${fs_used ${mountpoint}}\${alignr}\${fs_free ${mountpoint}} FREE"
      echo "\${fs_bar 3,300 ${mountpoint}}"
      echo "READ \${diskio_read  ${mountdev}}\${alignr}\${diskio_write  ${mountdev}} WRITE"
      echo ""
    fi
  fi
done
Run Code Online (Sandbox Code Playgroud)

问题:

目标是创建一个脚本,为我的每台计算机生成我首选的conky配置,而无需为每台计算机编辑文件.以上是一个片段,生成报告我的磁盘使用信息的部分.不幸的是,我输入ANYTHING时遇到了麻烦.我把各种调试回声扔进去,除了实际输出配置的if语句之外,它似乎都正常工作.我不知道它有什么问题.有什么建议或帮助吗?

谢谢你:)

kon*_*box 6

这是错误的路线:

if [[ $first ]]             # The first instance in each pair is the device name
Run Code Online (Sandbox Code Playgroud)

这总是评估为真.[[ true ]]或是[[ false ]]同义词[[ -n true ]][[ -n false ]]总是正确的.

你可能意味着什么

if "$first"
Run Code Online (Sandbox Code Playgroud)

要么

if [[ $first == true ]]
Run Code Online (Sandbox Code Playgroud)

  • @ Aleks-DanielJakimenko为什么丑陋?为了降低效率,减少练习?我当然不同意,如果是因为它不那么可读. (2认同)
  • @ Aleks-DanielJakimenko"不那么练习"对我不起作用.我不是一个社区拥抱者.根据其他优点,可以考虑"效率较低".`[[$ var == true]]`可能更长,但更具可读性.此外,如果整个应用程序具有这种风格,它并没有误导性.有一个明确的测试,所以这怎么会误导?也许除了一个愚蠢的假设,脚本编写者可能错过了为一个应该像布尔值一样的变量赋值.像[[$ var]],(($ var))一样,是脏快捷方式的真正形式. (2认同)
  • 请参阅[Boolean](http://en.wikipedia.org/wiki/Boolean)的定义:*在大多数计算机编程语言中,布尔数据类型是一种只有两个可能值的数据类型:true或false.*这样做没有严格定义如何实现这样的数据类型.Bash没有这些表单,所以由程序员/脚本编写者如何应用它.您不必在这里引用其他语言,因为它对如何完成它没有任何帮助.另外,`((var))`中的`var`可以取消引用另一个变量. (2认同)