bash 中的 if-then 語句用於切換螢幕分辨率

bash 中的 if-then 語句用於切換螢幕分辨率

如何編寫一個使用 xrandr 檢查螢幕解析度並根據當前解析度更改解析度的腳本?也就是說,切換解析度。

樣本輸出xrandr -q

   1920x1080     59.98 +  59.97    59.96    59.93  
   1680x1050     59.95    59.88  
   1600x1024     60.17  
   1400x1050     59.98  
   1600x900      59.99*   59.94    59.95    59.82

需要如何措辭來檢查當前解析度是否為 1600x900,則運行xrandr -s 0,但如果當前解析度為 1920x1080 則運行xrandr -s 4

簡而言之,問題是如何使腳本識別 xrandr -q 的輸出以切換解析度。例如:

#!/bin/bash

if <current resolution is 1920x1080>
then
  xrandr -s 5
elif <current resolution is 1600x900>
then
  xrandr -s 0
else
 <do nothing>
fi

基本上我需要一種方法讓腳本識別星號所在的行並將其切換到另一行。這將如何實現?

答案1

解決方案範例

該解決方案可以根據您的需求進行客製化。

#!/bin/bash
MYRES=$(xrandr -q | grep "\*" | awk '{ print $1; }')
echo -e "\nResolution is $MYRES\n"
case "$MYRES" in
  "1920x1080")
    echo "Size = 5"
    xrandr -s 5
    ;;
  "1680x1050")
    echo "Size = 4"
    xrandr -s 4
    ;;
  "1600x1024")
    echo "Size = 4"
    xrandr -s 4
    ;;
  "1400x1050")
    echo "Size = 3"
    xrandr -s 3
    ;;
  "1600x900")
    echo "Size = 0"
    xrandr -s 0
    ;;
  *)
    echo "Do nothing."
    ;;
esac

答案2

已回答此問題這裡經過 @喬原在 unix.stackexchange.com 上

使用進程替換:

#!/bin/bash

read resolution _rest < <(xrandr | grep '\*')

if [[ $resolution = 1920x1080 ]] ; then
    xrandr -s 5
elif [[ $resolution = 1600x900 ]] ; then
    xrandr -s 0
else
    echo Unknown resolution >&2
fi

相關內容