Linux Bash脚本条件判断失效求助(新手,Ubuntu 22.10)
问题与解决方案
问题描述
我是Dono,一名Linux Bash新手。通过Windows系统SSH连接到Ubuntu 22.10版本的Linode服务器,编写了Bash脚本,希望实现:输入“jeux”(对应英文“games”)时输出“Bon jeux!”,输入其他内容时输出“Bonne journée!”,但脚本的条件判断逻辑失效,无法正常执行。同时不清楚Linux下SSH会话中的复制粘贴操作方法。
附上脚本代码:
#!/bin/sh name=Dono user=$(whoami) date=$(date) whereamit=$(pwd) echo "Yio $name, comment tu va?" sleep 2 echo "Tu es connecter avec l'utilisateur $user." sleep 1 echo "Nous sommes le $date." sleep 2 echo "Que veux tu faire maintenant?" read reponse sleep 1 if ( reponse = jeux) then echo "Bon jeux!" else echo "Bonne journée!" fi
一、脚本条件判断修复
你的脚本条件判断存在3个核心错误:
- Bash中
()用于执行子shell命令,不能用来做条件判断; - 引用变量必须加
$符号,需写$reponse而非reponse; - 条件判断的
=符号前后必须留空格,否则会被识别为字符串而非比较运算符。
修改后的正确脚本:
#!/bin/sh name=Dono user=$(whoami) date=$(date) whereamit=$(pwd) echo "Yio $name, comment tu va?" sleep 2 echo "Tu es connecter avec l'utilisateur $user." sleep 1 echo "Nous sommes le $date." sleep 2 echo "Que veux tu faire maintenant?" read reponse sleep 1 # 修复后的条件判断:用[]包裹逻辑,变量加$,=前后留空格,字符串加引号避免空格干扰 if [ "$reponse" = "jeux" ] then echo "Bon jeux!" else echo "Bonne journée!" fi
也可以使用Bash更推荐的[[ ]]写法(兼容性稍差但语法更灵活):
if [[ "$reponse" == "jeux" ]]
二、SSH会话中的复制粘贴操作(Windows端)
根据你使用的终端工具,操作方式有所区别:
- Windows Terminal/CMD/PowerShell:
- 复制:选中文本后按
Ctrl+Shift+C - 粘贴:按
Ctrl+Shift+V
- 复制:选中文本后按
- PuTTY:
- 复制:直接选中文本,系统自动复制到剪贴板
- 粘贴:在PuTTY窗口内点击右键
- WSL终端:操作与Windows Terminal一致,使用
Ctrl+Shift+C/V
注意:若无法选中文本,可右键点击终端标题栏→「属性」,开启「快速编辑模式」即可正常操作。
内容的提问来源于stack exchange,提问作者Dono Config
相关产品推荐
相关产品推荐

