游鱼摆尾 发表于 2023-9-17 17:47:14

快捷键更换背景颜色

无意间看了hhh333的一个切换主题的脚本,依葫芦画瓢,想写一个更换背景颜色的脚本如下:

        #定义现有背景颜色
        set t1="#003345" #天蓝色
        set t2="#3F6B6B" #浅蓝色
        set t3="#365E27" #绿色
        set t4="#806C00" #暗黄色
        set t5="#810505" #红色
            #设置背景颜色
            background_color $t1
            hiddenentry "Switch background_color" --hotkey f5 {
            if [ "$background_color" == "$t1" ]; then
                  set background_color=$t2
            elif [ "$background_color" == "$t2" ]; then
                  set background_color=$t3
            elif [ "$background_color" == "$t3" ]; then
                  set background_color=$t4
            elif [ "$background_color" == "$t4" ]; then
                  set background_color=$t5
            else
                  set background_color=$t1
            fi
            }


但是没有作用是怎么回事呢

车厘子 发表于 2023-9-17 18:33:12

沙发

2011whp 发表于 2023-9-17 21:06:57

全部 用命令
background_color $t2

yc2428 发表于 2023-9-17 23:10:07

谢谢分享。

蓉城1998 发表于 2023-9-18 10:52:50

感谢分享。

martin313 发表于 2023-9-18 14:28:31

支持研究开发{:1_186:}

nathan6498 发表于 2023-9-18 15:48:13

谢谢分享

游鱼摆尾 发表于 2023-9-18 17:23:46

2011whp 发表于 2023-9-17 21:06
全部 用命令
background_color $t2

我改成这样有效果,但是只能按一次就失效了
            hiddenentry "Switch background_color" --hotkey f5 {
            if [ "$background_color $t1" ]; then
                  background_color $t2
            elif [ "$background_color $t2" ]; then
                  background_color $t3
            elif [ "$background_color $t3" ]; then
                  background_color $t4
            elif [ "$background_color $t4" ]; then
                  background_color $t5
            elif [ "$background_color $t2" ]; then
                  background_color $t6
            elif [ "$background_color $t3" ]; then
                  background_color $t7
            elif [ "$background_color $t4" ]; then
                  background_color $t8
            else
                  background_color $t1
            fi
            }

只能切换一次,我想按一次f5就切换一次,按一次就切换一次。

于是我想到了bush脚本中的for循环,但是一窍不通,不会。哎

游鱼摆尾 发表于 2023-9-21 14:17:50

gues1688 发表于 2023-9-21 12:25
参考如下,用了正常菜单,没用隐藏菜单,原理一样,错误原因是,执行background_color "$t1"命令,并不会 ...

大佬牛逼,没有想到环境变量这点,所以判断也失去了意义!其实我还想利用bash脚本的for循环来写更简洁,但是奈何小白一个,不会。。。比如
for num in {1..10}
do
background_color $tnum
done

我想参照这个最终的更换主题脚本(来自hhh333)
#主题切换-F5切换-F6清除
#主题计数
export theme_count=0
for item in $prefix/themes/*/theme.txt; do
        expr --set=theme_count $theme_count+1
done

if [ $theme_count -gt 0 ]; then
        set theme_index=1

        #换主题
        hiddenentry "Switch Themes" --hotkey f5 {
                set i=0
                expr --set=theme_index $theme_index+1
                if [ $theme_index -gt $theme_count ]; then
                        set theme_index=1
                fi
                for item in $prefix/themes/*/theme.txt; do
                        expr --set=i $i+1
                        if [ $i -eq $theme_index ]; then
                                set theme=$item
                                break
                        fi
                done
        }

        #无主题
        hiddenentry "Clear Themes" --hotkey f6 {
                if [ "$theme" != "" ]; then
                        unset theme
                fi
        }
fi
思路有,但是一点也不会{:1_189:}

LRM-COM 发表于 2023-9-23 15:49:39

谢谢分享

zwf2002 发表于 2023-9-24 10:00:57

目前还是chromium这类

游鱼摆尾 发表于 2023-9-27 15:44:35

gues1688 发表于 2023-9-23 15:38
用循环的代码可读性稍差,给你两段代码参考:

谢谢大佬,请收下我的膝盖。代码确实看的云里雾里,第一段代码$i1,$i2,$item绕来绕去看不懂。还有unset是清除变量吗,为什么要清除这两个变量呢?break是终止循环吗,是什么情况下终止循环?第二段那就更是看天书了{:1_189:}

游鱼摆尾 发表于 2023-9-27 15:50:25

本帖最后由 游鱼摆尾 于 2023-9-27 16:03 编辑

gues1688 发表于 2023-9-23 15:38
用循环的代码可读性稍差,给你两段代码参考:
还有我找葫芦画瓢弄了一个循环切换背景图片的代码,可行,但好像会切换为纯黑背景,有的图片还会连续重复切换一次,不知道哪里有问题。大佬帮忙看看:

background_image /EFI/grub2/backgrounds/bg.jpg
#背景图片计数
export bg_count=0
for item in $prefix/backgrounds/*.*; do
          expr --set=bg_count $bg_count+1
done

if [ $bg_count -gt 0 ]; then
          set bg_index=1

          #换背景
          hiddenentry "【按 f5 键,切换背景图片】" --hotkey f5 {
                  set i=0
                  expr --set=bg_index $bg_index+1
                  if [ $bg_index -gt $bg_count ]; then
                        set bg_index=1
                  fi
                  for item in $prefix/backgrounds/*.*; do
                        expr --set=i $i+1
                        if [ $i -eq $bg_index ]; then
                                                   background_image $item
                                  set bg=$item
                                  break
                        fi
                  done
          }
fi

游鱼摆尾 发表于 2023-9-27 16:04:29

游鱼摆尾 发表于 2023-9-27 15:50
还有我找葫芦画瓢弄了一个循环切换背景图片的代码,可行,但好像会切换为纯黑背景,有的图片还会连续重复 ...

哈哈,我找到原因了,有重复的图片和不支持的图片所导致的结果{:1_201:}

游鱼摆尾 发表于 2023-9-27 16:05:21

gues1688 发表于 2023-9-23 15:38
用循环的代码可读性稍差,给你两段代码参考:

哈哈,我找到原因了,有重复的图片和不支持的图片所导致的结果{:1_201:}

游鱼摆尾 发表于 2023-9-27 16:12:20

gues1688 发表于 2023-9-23 15:38
用循环的代码可读性稍差,给你两段代码参考:

当文件不支持时,就会显示为纯黑背景。但是很奇怪同样是jpg文件,并且分辨率也一样是1024*768,另外一张支持,而有一张却不支持。{:1_187:}

游鱼摆尾 发表于 2023-9-27 16:58:05

本帖最后由 游鱼摆尾 于 2023-9-27 17:00 编辑

gues1688 发表于 2023-9-23 15:38
用循环的代码可读性稍差,给你两段代码参考:
烦死了删除重复图片,还是有一张连续重复1次,看来是代码的问题

另外,我想加上无背景的代码,但是没用
      #无背景
      hiddenentry "【按 f6 键,切换背景图片】" --hotkey f6 {
                if [ "$theme" != "" ]; then
                        unset background_image或unset bg都没用
                fi
      }
fi

游鱼摆尾 发表于 2023-9-29 15:36:13

gues1688 发表于 2023-9-28 21:01
background_image是命令,又不是环境变量,怎么可以 unset background_image ?
想清除背景图,只能找一 ...

嗯嗯,谢谢啦,您的代码可以,我清除图片直接用的代码background_color="#000000",反正清除图片的本质就是会变为默认纯黑背景。另外如果backgrounds文件夹里有其它文件,比如bat文件,txt文件。有什么办法排除吗,否则切换时遇到不支持的文件会变为纯黑背景。

2011dsfive 发表于 2023-9-29 21:04:49

不错谢谢分享

游鱼摆尾 发表于 2023-9-30 16:31:31

gues1688 发表于 2023-9-29 21:00
嗯,清除背景,用黑色或其它纯色背景都可以。
假设,图片的扩展名是.png,代码参考如下:
注意,第5、6 ...

哈哈,我的意思是图片有多种格式,只想排除bat或者txt后缀的文件

游鱼摆尾 发表于 2023-9-30 16:33:37

gues1688 发表于 2023-9-29 21:00
嗯,清除背景,用黑色或其它纯色背景都可以。
假设,图片的扩展名是.png,代码参考如下:
注意,第5、6 ...

并不是用指定格式图片文件,代码的话在grub2里能做到吗{:1_201:}

ec2001 发表于 2023-9-30 20:51:28

谢谢分享

游鱼摆尾 发表于 2023-10-1 16:28:26

gues1688 发表于 2023-9-30 20:00
可以,用正则表达式,提取、筛选扩展名
20楼是一个应用实例
更多的可以百度,或者参考此贴:


纯小白不会,只会挑现成的依葫芦画瓢{:1_189:}

游鱼摆尾 发表于 2023-10-3 12:02:56

gues1688 发表于 2023-10-2 11:29
参考如下:

论坛有问题!贴出的代码会被吃掉!再贴一次试试:


如果是多种格式可以这样写吗
if regexp '^(jpg)|(png)|(bmp)$' "$name_ext"; then

rbwrbw 发表于 2023-10-6 17:28:36

配置要求很严格,错一个符号都不行!!有时还要区分大小写

游鱼摆尾 发表于 2023-10-6 17:34:03

gues1688 发表于 2023-10-3 21:15
嗯,可以。 代码中,| 表示 “或”的意思
其实不用正则表达式也可以。
23楼 http://bbs.wuyou.net/foru ...

谢谢大佬,我看了一下您之前分享给我的链接里面的正则表达式用法,如果要区分大小写还可以这样写吗,也就是说不用将拓展名转换成大写或者小写,直接写成这样:
if regexp '^||$' "$name_ext"; then

say_dude 发表于 2023-10-17 15:46:09

多学多练,不断进步,方能立于不败之地

无犹启动 发表于 2023-10-27 16:28:02

谢谢分享
页: [1]
查看完整版本: 快捷键更换背景颜色