这是 hsetroot 工作的基本设置: hsetroot -center /path/to/image/ - 仅使用图片设置壁纸。要使用这些选项,只需将一个选项放置在同一行参数中,仅使用这三个选项之一。 -flipd 、 -fliph 、 -flipv 总共提供了 4 个可在设置 hsetroot 时使用的选项,因此其中一个选项将为“void”或不存在。
因此,为了能够使用所有四个选项,需要放置在程序调用中的 $variable 必须“消失”,以便系统看不到它,而 $var 仍然放置在参数中由脚本调用。
案例陈述非常适合此工作。只需让 RANDOM 给你 4 个数字之一,然后 case 语句选择一个,或者该数字与它的大小写匹配,然后将其设置到 hestroot 的参数行中。
其格式为 hsetroot -flipd -center /path/to/image -- 为了取代必须手动更改该选项,我们只需使用 $var,然后在函数中重新分配相同的 $var,这样我们就可以消除打开终端或脚本并以不同的方式再次写入。现在我们可以使用该变量来代替提供给用户的所有四个选项来设置 hsetroot,如下所示: hsetroot $var -center /path/to/image
其中 $var 现在成为以下之一: 1) -fliph 、 2) -flipd 、 3) -flipv ,而 4) 第四个或最后一个选项根本就没有。
休斯顿,我们现在有问题了!
由于我们希望不必打开该脚本并手动更改它,因此我们必须让系统相信该行代码中编写的 $var 已不存在。它必须消失或变得不可见,这样它就不会影响正在寻找其需要的所有参数的程序,以便它能够无错误地运行。
我们该怎么做呢?
换句话说:
我有一个案例陈述,有 4 个选项,其中一个必须为“空”,以表明它甚至不存在。它是这样的:我遇到的问题是案例“0”,因为 $variable 必须保留在参数行内,但如果 RANDOM 给变量赋予零值(0),那么它需要像“消失”一样它甚至不存在,并且仍然允许程序使用所有其他参数来执行它所做的事情。我已经准备好尝试所有这些:
setS="" and setS='' and setS="NULL" and unset -v setS
他们都不工作
flipS()
{
RANGE=3
val=$RANDOM
let "val %= $RANGE"
case $val in
1 )
setS="-flipd"
echo "$setS 1"
;;
2 )
setS="-fliph"
echo "$setS 2"
;;
3 )
setS="-flipv"
echo "$setS -- 3"
;;
0 )
setS=' '
echo "$setS -- 4"
;;
esac
}
flipS
这是用于 hsetroot 随机化屏幕设置 语法: hsetroot [command1 [arg1..]] [command2 [arg1..]]... 带有 -flipv 等。它们后面不带 arg。只是将其放置在其本身中。
注意:我以随机方式使用 hsetroot 的几乎每个参数,因此不能选择像这样使用 case 语句:
RANGE=3
val=$RANDOM
let "val %= $RANGE"
cast $val in
1 )
hsetroot -flipd -center /path/to/image
;;
2 )
hsetroot -flipv -center /path/to/image
;;
.......
答案1
如果你想要 4 个案例 (0,1,2,3),你需要
RANGE=4
简化:
flipS() { local options=("" "-fliph" "-flipd" "-flipv") local index=$(( RANDOM % ${#options[@]} )) setS=${options[$index]} }
如果您想
setS
以这样的方式使用该命令,如果它是空字符串,则命令看不到它,则不得引用该变量:hsetroot $setS -anotheroption ...