Unix Shell脚本:如何实现传入字符串的交替字符大小写转换
嘿,这有几个能帮你实现字符串大小写互换(小写转大写、大写转小写)的Shell脚本方案,都是实际场景里好用的,你可以根据自己的环境选:
方法1:用
tr命令(最简洁通用) tr是Unix系统里专门做字符转换的工具,实现这个需求一行命令就搞定,脚本写起来超简单:
#!/bin/bash # 检查是否传入了参数 if [ $# -eq 0 ]; then echo "提示:请传入需要转换的字符串作为参数,比如 ./toggle_case.sh \"HeLLo\"" exit 1 fi # 执行大小写互换 echo "$1" | tr '[:upper:][:lower:]' '[:lower:][:upper:]'
使用方式
把脚本存为toggle_case.sh,赋予执行权限:
chmod +x toggle_case.sh
然后调用:
./toggle_case.sh "HeLLo WoRLd 123!"
输出结果:hEllO wOrlD 123!
方法2:用
awk实现(更灵活,支持非字母字符保留) 如果需要对非字母字符做保留处理,awk的字符判断能力会更顺手,脚本示例:
#!/bin/bash if [ $# -eq 0 ]; then echo "提示:请传入需要转换的字符串作为参数" exit 1 fi echo "$1" | awk '{ result = "" # 遍历每个字符 for (i=1; i<=length($0); i++) { c = substr($0, i, 1) if (c ~ /[a-z]/) { result = result toupper(c) # 小写转大写 } else if (c ~ /[A-Z]/) { result = result tolower(c) # 大写转小写 } else { result = result c # 非字母字符直接保留 } } print result }'
这个方法的优势是可以精准控制每个字符的处理逻辑,比如遇到数字、符号都不会改动。
方法3:纯Bash内置实现(无需外部工具,效率更高)
如果你的环境只能用纯Bash(不能调用tr/awk这类外部命令),可以用Bash的参数扩展和循环来实现:
#!/bin/bash if [ $# -eq 0 ]; then echo "提示:请传入需要转换的字符串作为参数" exit 1 fi input="$1" output="" # 逐个字符处理 for (( i=0; i<${#input}; i++ )); do char="${input:i:1}" if [[ "$char" =~ [a-z] ]]; then output+=${char^^} # 小写转大写 elif [[ "$char" =~ [A-Z] ]]; then output+=${char,,} # 大写转小写 else output+="$char" # 非字母字符保留 fi done echo "$output"
这个方案完全依赖Bash自身特性,不需要启动额外进程,在频繁调用的场景下效率会更高。
小提醒
如果要处理带空格或者特殊字符的字符串,调用脚本时一定要把参数用双引号括起来,避免被Shell拆分哦~
内容的提问来源于stack exchange,提问作者Gudala Sandeep
相关产品推荐
相关产品推荐

