shell简单使用
最近需要用到shell脚本实现关机保护作用,总结下语法
要点:
1、linux下编写的shell脚本不能在window下编写,否则会出现^M的错误,用window编写保存,在linux用vim打开,每行的最后一个会出现^M
原因:对回车键判定不一致,window是\r\n,unix是\r, 用ultraedit打开会提示用dos格式还是unix格式,用此软件打开不会存在这种情况。
2、对字符串进行判断是否为空,在变量加双引号""
tmp=`ps | grep "ups_netcomm"` if [ ! -z "$tmp" ]; then pid=`ps | grep "ups_netcomm" | awk '{print $1}' ` echo "the process ups_netcomm is running, kill ups_netcomm process pid:$pid" kill -9 $pid fi
3、awk 进行一定规律的文本分析,例如 ps -aux | awk '{print $1}' , 而sed用于查找替代文件内容
4、sh与bash不一样, sh是bash的子集,sh是posix标准, 通用于任何符合posxi标准
shell常用命令: http://segmentfault.com/a/1190000002924882#articleHeader3
5、 bash里 return 的返回值只能为整数
获取函数的字符串返回值的方法
function unzipPackage() { echo "test" } result=`unzipPackage "$guardUUID" "$fileDate"`
获取函数的retrun的返回值
function unzipPackage() { return 12 } unzipPackage $guardUUID $fileDate result=`echo $?`
php 在使用 $last_line = exec("./bash.sh", $output, $ret); 其中的$ret 是 bash.sh的 return的值, $last_line 是bash.sh的echo 的值
统计行数:
find . -name "*.[c|h]"|xargs cat|grep -v ^$|wc -l
[ $enabled = 0 ] && return
6、if else 的判断语句的替换
[ $switch2 == 0 ] && switch2=1 || switch2=0
7、判断变量不为空的字符串执行, 如果UCI_CONFIG_DIR不为空则执行后续内容
/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} commit $PACKAGE
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?