问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux脚本中的冒号是什么意思? 第一行:read YN , 第二行 :${YN:=yes},第三行 case $YN in ...

发布网友 发布时间:2022-05-10 07:30

我来回答

2个回答

热心网友 时间:2023-11-21 05:38

题主你好,

写在前面:

题主的代码写的其实有点问题, 第2行的第1个字符,冒号,和第2个字符,美元符号,之间是有空格的,正确的写法是:
: ${YN:=yes}
不同的语言语法*程度不一样, 在shell脚本中,对空格的*就比较严格, 同样的代码, 你不加空格就是错的, 加上才对. 相同的用法在test命令的简写形式[]中也比较常见(就不具体展开了,题主有需要可以追问)
---------------------
下面解释题主的代码:
其实题主的代码逻辑很简单:
从标准输入中读取值赋给变量YN //这是第一行代码的作用
然后检测第一行的变量YN是否真的有值,如果有值,则跳过, 没值的话则将yes作为变量值赋给YN. 这里题主可能会问, 第一行代码不是已经从标准输入读取值赋给YN了嘛,怎么第2句还要检测YN是否有值呢? 这是因为如果第一句代码执行后, 你没有从键盘输入值,而是直接按的回车,则YN就没有值. 将第1句和第2句要连起来看, 就是:

"当我们没有从标准输入赋值给YN时, YN的默认值是yes" //这就是第二行代码的作用
至于第三行代码就没啥说的了, 就是看$YN和下面给定的哪个值相匹配,则执行哪个值下的语句,因为第三句这里也没写全,就先说到这里
---------------------
上面只是解释了一下这三行代码的意思, 下面再来说一下题主问题中 "第2行代码中两个冒号的意思"
先说第2个冒号吧, shell脚本中有一个概念叫替换运算符, 我们常见的变量赋值的形式是:
变量名=值
另外shell脚本还提供了一组稍复杂一点的处理变量的运算符, " := "就是其中一个, 这么说可能有点不对, 完整的语法是:

${变量名:=值}
而上面这个语法的处理逻辑是: 先看看 " 变量名 "是否存在并且非空, 如果是,则返回" 变量名 "的值. 举例来说:
name="zhangsan"
echo ${name:=lisi}
上面第一行代码是给变量name赋值为zhangsan, 第2行代码是用echo 输出${name:=lisi}的返回值, 而${name:=list}具体是啥值,上面也说了判定逻辑, 看看name是否存在且非空, 因为上面定义了name="zhangsan", 所以这里name肯定是存在且非空的, 所以${name:lisi}的返回值是name变量的值,即zhangsan. 因此 echo ${name:=lisi}也就变成了我们常见的形式: echo zhangsan, 即echo ${name:=lisi}输出的值为zhangsan.
上面是" 变量名 "存在的情况, 下面再来说" 变量名 "不存在的情况. 举例来说:
echo ${name:=lisi}
就上面这一行代码, 这里就简单说了, 因为name上面没有定义, 所以name是不存在的, 因此会将lisi赋给变量name, 返回值为lisi, 因此echo ${name:=lisi}变成了echo lisi, 所以最后的输出值为: lisi.
下面再来第2行代码的第一个冒号, 如果没有第1个冒号, YN的值会被作为命令去执行, 也就是说,
如果你只写 ${YN:=yes} , 则当YN之前有值,且为no时,则这句执行后, 返回值为no,然后no会被被作为一个命令执行, 因为系统里没有no这个命令,所以会报错, 说no这个命令没发现; 而当YN之前没有值时, 该命令执行后,返回值为yes, 同样,yes也会被作为命令执行, 会不断的输出y(这就是一种特殊性, 因为yes是linux中的一个命令,并且它没有参数的时候也不会报错, 但会重复输出y,因此你不会看到报错信息, 而是不断输出的y,如果你换一个值,比如${YN:=666},则执行后,就会输出666命令没发现).
因此最简单的记第1个冒号的作用是:

"它只评估后面的参数,而忽略参数的返回值"
写在最后: 上面洋洋洒洒说了一堆, 有些地方逻辑不是太严谨,有错误的地方也请题主指正.

希望可以帮到题主, 欢迎追问.

热心网友 时间:2023-11-21 05:38

你这恐怕不是纯粹的bash脚本吧
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...要送一只古牧给我,5个月大,我查资料说有的古牧很温顺有的很凶,怎么... 古牧犬会认主人吗 Microsoft 微软 Surface Laptop 2 13.5英寸触控超极本 - 详细介绍... Microsoft 微软 Surface Laptop 2 13.5英寸轻薄本(典雅黑)- 高效便携... Microsoft 微软 Surface Laptop 2 13.5英寸 笔记本电脑-详细介绍_百度... Microsoft 微软 Surface Laptop 2 13.5英寸轻薄本(灰钻蓝)-详细介绍... 怎么用selenium做自动化测试 自动化测试是怎样的流程 【自动化测试教程】Java+Selenium自动化测试环境搭建 爆炒猪肉片怎么炒才嫩好吃 Linux脚本中case语句的小问题 LINUX shell,如何用sed给一个值加双引号 linux shell文件, echo、date、killall相关 linux下想通过shell,打开一个程序,然后对这个程序进行输入,这一切都是在shell里面完成。 pillow的中文是什么意思 神话里玉漱是谁演的? 神话 玉漱公主 如何评价小米插线板 小米插线板宣传的瓶盖大小插头的具体尺寸? 新出的小米插线板usb口能直接给iPhone充电吗?插线板线多长 求问小米插线板有多长 小米USB插线板线多长有3-5米的吗 神话玉漱怀孕是哪一集 神话 玉漱 为什么被关入天宫里? 神话中玉漱为秦始皇跳舞是在第几集? 胡哥版的那个神话里玉漱是谁?哪国人呀? 历史上玉漱公主的原型是谁 桃仁指的是核桃仁还是桃子核的仁 桃仁是桃子仁还是核桃仁 胡桃仁是什么东西 君子固穷的意思是什么 君子固穷的意思及成语解释 君子固穷指的是什么 君子固穷是什么短语? 君子固穷是什么意思? 君子固穷的故事,成语故事 “君子固穷”和“学而优则仕”这两句古语指的是什么 高燃烧效率——先进预燃室点火技术解析 车用尿素结晶堵塞的原因有哪些 女子标准体重计算 如何设置sketchup 显示分辨率? 电脑屏幕设置的1920x1080,sketchup8 里显示分辨率很低 为什么su始终没有使用偏好设置 苹果Mac系统下安装完SUAPP跳出提示怎么解决 我的sketchup里窗口选项里为什么找不到参数设置 sketchup使用偏好里面快捷键设置问题 SU草图大师小人怎么换成其他的东西 sketchup窗口栏没有使用偏好按钮!这个是什么原因啊,求大神! 乡村卖家在阿里巴巴上有多少 su19版如何设置工作界面 阿里巴巴平台有多少户商家???