我有一个脚本,我目前正在将颜色格式应用于我想要颜色的每行代码。
## Shell color variables
red=`tput setaf 1`
green=`tput setaf 2`
yellow=`tput setaf 3`
reset=`tput sgr0`
bold=`tput bold`
## Questions = yellow
## Actions = green
## Errors = red
read -p "${yellow}${bold}What is your name?${reset} " hostname
echo "${green}Pulling up a list of files that begin with $FILELIST ...${reset}"
echo "${red}File already exists! Exiting...${reset}"
这不是完整的脚本只是它看起来的样本,但大多数情况下它主要是使用回声和上面看到的内容将脚本输出应用于颜色。问题是,对于每一行,无论是问题,动作还是错误,我都在每一行定义。这是一个非常冗长的脚本,逐行应用格式化是非常繁琐的工作。必须有一个更好的方法。有没有办法定义类并将颜色应用于这些类,所以我不必在每一行上指定它?我在想,因为我的大多数彩色线都使用echo,所以只需在顶部创建一些回声变量:
##This is for a question:
echoq=$(echo -e "\033[1;93m"this is my question text in yellow"\033[m")
or
echoq=$(${yelllow}${bold}"this is my question text in yellow"${reset})
##This is for an action
echoa=$(echo -e "\033[1;91m"this is my action text in red"\033[m")
or
echoa=$(${red}${bold}"this is my action text in red"${reset})
然后,一旦我定义了所有变量,我就只使用echoq,echoa或echor。这样的事情是否可行?
答案 0 :(得分:2)
当然,functions ---
;6;;7;;8;;16;
然后,您可以将yellow=$(tput setaf 3)
reset=$(tput sgr0)
echoq() {
echo "${yellow}$1${reset}"
# $1 is the first parameter to echoq, not the first parameter to your script
}
echoq "This is a question" # Prints in yellow
复制到echoq
和echoa
,然后将echor
更改为${yellow}
或您想要的任何颜色或转义序列。
修改:在回答您的问题时,${red}
中的字符串有三个部分,全部卡在一起:
echoq
所以${yellow} The value of the "yellow" variable --- change to yellow
$1 The parameter to echoq. You can also write this as ${1}.
${reset} The value of the "reset" variable --- Reset the terminal
实际上是$1$
加上$1
的前导$
。你仍然会在每个函数中使用${reset}
,因为每个函数都会像每个脚本一样获得自己的参数。