# 2.1 调用一个脚本
写完一个脚本以后,你可以通过`sh scriptname`[^1]或`bash scriptname`来调用它(不推荐使用`sh <scriptname`调用脚本,因为这会禁用脚本从标准输入(stdin)读入数据)。更方便的方式是使用`chmod`命令使脚本可以被直接执行。
执行命令:
`chmod 555 scriptname`(给予所有用户读取/执行的权限)[^2]
或
`chmod +rx scriptname`(给予所有用户读取/执行的权限)
`chmod u+rx scriptname`(仅给予脚本所有者读取/执行的权限)
当脚本的权限被设置好后,你就可以直接使用`./scriptname`[^3]进行调用测试了。如果脚本文件以sha-bang开头,那么它将自动调用指定的命令解释器运行脚本。
完成调试与测试后,你可能会将脚本文件移至`/usr/local/bin`(使用root权限)中,使脚本可以被所有用户调用。这时你可以直接在命令行中输入`scriptname [ENTER]`执行脚本。
[^1]: 注意,当你使用`sh scriptname`调用*Bash*脚本时,将会禁用与Bash特性相关的功能,脚本有可能会执行失败。
[^2]: 脚本需要同时具有读取和执行的权限,因为shell需要读取脚本执行。
[^3]: 为什么不直接使用`scriptname`来调用脚本?为什么当工作目录($PWD)正好是`scriptname`所在目录时也不起作用?因为一些安全原因,当前目录(`./`)并不会被默认添加到用户的$PATH路径中。因此需要用户显式使用`./scriptname`在当前目录下调用脚本。
- 第一部分 初见shell
- 1. 为什么使用shell编程
- 2. 和Sha-Bang(#!)一起出发
- 2.1 调用一个脚本
- 2.2 牛刀小试
- 第二部分 shell基础
- 3. 特殊字符
- 4. 变量与参数
- 4.1 变量替换
- 4.2 变量赋值
- 4.3 Bash弱类型变量
- 4.4 特殊变量类型
- 5. 引用
- 5.1 引用变量
- 5.2 转义
- 6. 退出与退出状态
- 7. 测试
- 7.1 测试结构
- 7.2 文件测试操作
- 7.3 其他比较操作
- 7.4 嵌套 if/then 条件测试
- 7.5 牛刀小试
- 8. 运算符相关话题
- 8.1 运算符
- 8.2 数字常量
- 8.3 双圆括号结构
- 8.4 运算符优先级
- 第三部分 shell进阶
- 10. 变量处理
- 10.1 字符串处理
- 10.1.1 使用 awk 处理字符串
- 10.1.2 参考资料
- 10.2 参数替换
- 11. 循环与分支
- 11.1 循环
- 11.2 嵌套循环
- 11.3 循环控制
- 11.4 测试与分支
- 12. 命令替换
- 13. 算术扩展
- 14. 休息时间
- 第五部分 进阶话题
- 19. 嵌入文档
- 20. I/O 重定向
- 20.1 使用 exec
- 20.2 重定向代码块
- 20.3 应用程序
- 22. 限制模式的Shell
- 23. 进程替换
- 26. 列表结构
- 25. 别名