shell学习随记

 Shell [ ](测试命令)中用于判断文件、字符串或数字状态的各种选项吧?我帮你整理一下常用的 - 开头的判断选项及其作用:


一、字符串测试相关(常见 - 选项)

选项说明示例
-z字符串长度为0(空字符串)[ -z "$str" ]
-n字符串长度非0(非空字符串)[ -n "$str" ]
=字符串相等[ "$a" = "$b" ]
!=字符串不等[ "$a" != "$b" ]

二、文件测试相关(常见 - 选项)

选项说明示例
-f是否是普通文件[ -f filename ]
-d是否是目录[ -d dirname ]
-e文件(或目录)是否存在[ -e filename ]
-r文件是否可读[ -r filename ]
-w文件是否可写[ -w filename ]
-x文件是否可执行[ -x filename ]
-s文件是否非空(大小 > 0)[ -s filename ]
-L是否为符号链接[ -L filename ]
-S是否为套接字(socket)[ -S filename ]
-p是否为命名管道(FIFO)[ -p filename ]

三、整数比较相关(不带 - 的比较符)

整数比较用以下符号(需要放在 [ ] 中):

操作符说明示例
-eq等于[ "$a" -eq "$b" ]
-ne不等于[ "$a" -ne "$b" ]
-gt大于[ "$a" -gt "$b" ]
-ge大于等于[ "$a" -ge "$b" ]
-lt小于[ "$a" -lt "$b" ]
-le小于等于[ "$a" -le "$b" ]

四、示例总结

# 判断文件是否存在且是普通文件
if [ -f "myfile.txt" ]; then
  echo "是普通文件"
fi

# 判断目录是否存在
if [ -d "/tmp" ]; then
  echo "目录存在"
fi

# 判断字符串是否为空
if [ -z "$var" ]; then
  echo "变量为空"
fi

# 判断两个数字是否相等
if [ "$a" -eq "$b" ]; then
  echo "数字相等"
fi

编写脚本时if使用注意事项:

1. 空格强制要求:`[` 和 `]` 前后必须有空格  
   - ✅ 正确:`[ -f file ]`  
   - ❌ 错误:`[-f file]`

2. 变量必须加引号:防止空变量或含空格变量导致语法错误  
   ```bash
   [ "$var" = "value" ]  # ✅
   [ $var = "value" ]    # ❌($var 为空时报错)
   ```

3. 返回值规则:  
   - 条件为真 → 返回 `0`  
   - 条件为假 → 返回  非`0`(通常是 `1`)

4. 操作符专用:  
   - 数值比较:`-eq`, `-ne`, `-lt`(不能用 `==`, `>`)  
   - 字符串比较:`=`, `!=`, `-z`

---

 与 C 语言的核心区别:

特性Shell    | C 语言  
真值返回值`0` 表示真  `0` 表示假
假值返回值非`0` 表示假(通常是 `1`)非`0` 表示真  
变量引用必须加 `$` 符号直接使用变量名
语法格式严格依赖空格无空格要求

示例:  
 - Shell 真值判断:`if [ 1 -eq 1 ]; then` → 返回 `0`(真)  
 - C 语言真值判断:`if (1 == 1)` → 返回 `1`(真)

开发相关随记包含多个方面: - **软件开发**:在增加和设计较为庞大的程序时,要考虑程序结构设计,如解耦、层与层接口、模块之间关系、参数、ram、flash、运行速度等。还可学习了解aoutosar的分层结构。新的项目需在较短时间完成从零编码到交付[^1]。 - **IsaacLab开发**:遇到在spring - damping模型下,调大限制和刚度、damping参数后出现异常情况,几十个episode插入后不在孔周围晃,此现象与预期不符,需进一步理顺[^2]。 - **Chrome扩展程序开发**:Map是新的数据类型,可在JavaScript中用于存储键值对实现快速查找,还给出了本地缓存工具的代码实现,同时列举了一些相关学习参考资料,如ReqBin在线API测试工具、Chrome插件开发攻略等[^3]。 ```javascript let data = new Map([ ['Alice', 25], ['Bob', 30], ['Charlie', 35], ['David', 40] ]); console.log(data.get('Alice')); // 25 var myLocalStorageTool = { set: function(key, value) { localStorage.setItem(key, value); }, get: function(key) { return localStorage.getItem(key); }, remove: function(key) { localStorage.removeItem(key); }, removeAll: function() { localStorage.clear(); }, toJsonString: function(jsData) { return JSON.stringify(jsData); }, toJsData: function(jsonString) { return JSON.parse(jsonString); } }; ``` - **X86平台开发**:对于intel的X86平台,intel提供完整数据手册和丰富资源,不同卷册有不同内容,如vol 1是整体介绍,vol 2是CPU部分寄存器说明等,还有PDG、硬件设计指南、散热文档、产线可制造性文档等可供参考[^4]。 - **通用开发问题**:client的定时器是通用功能,但依赖cocos2d的Scheduler类,导致移植到server端困难,使用C++标准库实现可避免该问题[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值