在Linux系统中,sh文件(Shell脚本)是通过Shell解释器执行的文本文件,常用于自动化任务、系统管理等场景,编辑sh文件需要掌握创建、修改、保存及权限设置等命令,以下是详细操作步骤和注意事项。

创建sh文件
编辑sh文件前需先创建文件,常用方法有三种:
- 使用
touch命令:touch script.sh,创建一个空文件,后续通过编辑器添加内容。 - 使用
cat命令配合重定向:cat > script.sh << EOF,输入脚本内容后,单独输入EOF结束(多行输入模式)。 - 使用
echo命令:echo '#!/bin/bashnecho "Hello World"' > script.sh,直接写入单行或多行内容(需用n分隔多行)。 
编辑sh文件内容
Linux下常用文本编辑器有vi/vim、nano、gedit等,其中vi/vim功能强大但需学习基本操作,nano适合新手,以下是两种主流编辑器的使用方法:  
使用vi/vim编辑
vi/vim是Linux内置的编辑器,操作分为“命令模式”和“插入模式”:  
- 打开文件:
vi script.sh,进入命令模式(光标无法直接编辑)。 - 进入插入模式:按
i键(在光标前插入)或a键(在光标后插入),此时底部显示-- INSERT --。 - :输入脚本内容,
#!/bin/bash name="Linux" echo "Hello, $name!"
 - 保存并退出:
- 按
ESC键返回命令模式; - 输入
wq(保存并退出)或q!(不保存强制退出)。 
 - 按
 
使用nano编辑
nano是轻量级编辑器,操作直观,适合快速编辑:  

- 打开文件:
nano script.sh,直接进入编辑界面。 - :输入脚本内容,界面底部显示快捷键(如
^O保存、^X退出)。 - 保存并退出:
- 按
Ctrl+O保存,回车确认文件名; - 按
Ctrl+X退出,若修改未保存会提示是否保存。 
 - 按
 
不同编辑器操作对比:
| 操作          | vi/vim          | nano            |
|—————|——————-|——————-|
| 打开文件      | vi script.sh    | nano script.sh  |
| 进入编辑模式  | 按i或a        | 直接输入          |
| 保存文件      | ESC→wq       | Ctrl+O          |
| 退出编辑器    | ESC→q!       | Ctrl+X          |  
保存文件与设置权限
- 
保存文件:
- 使用
vi/vim或nano编辑后,按上述方法保存即可。 - 若需强制覆盖保存(如权限不足),
vi/vim下可使用wq!。 
 - 使用
 - 
设置执行权限:
Linux默认不赋予.sh文件执行权限,需通过chmod命令添加:chmod +x script.sh:添加执行权限(+x表示用户、组、其他用户均可执行)。chmod 755 script.sh:设置权限为rwxr-xr-x(所有者可读写执行,组和其他用户可读执行)。
 
执行sh文件
编辑完成后,可通过以下方式执行脚本:

- 直接执行(需有执行权限):
./script.sh # 当前目录下执行,需加`./`(避免与系统命令混淆)
 - 通过Shell解释器执行(无需执行权限):
bash script.sh # 调用bash解释器执行 sh script.sh # 调用sh解释器执行(兼容性较好)
 
注意事项
- Shebang行:脚本首行需添加
#!/bin/bash(或#!/bin/sh),指定解释器,否则可能使用默认Shell导致语法错误。 - 路径问题:脚本中涉及文件路径时,尽量使用绝对路径(如
/home/user/file.txt),避免相对路径(如./file.txt)因执行位置不同出错。 - 注释规范:使用添加注释(如
# 定义变量),提高脚本可读性。 
相关问答FAQs
Q1:编辑sh文件时,使用vi/vim如何保存并退出?
A:保存并退出的步骤为:① 按ESC键从插入模式切换到命令模式;② 输入wq(w表示保存,q表示退出),回车即可,若不保存直接退出,输入q!(表示强制)。  
Q2:为什么sh文件设置了执行权限后,执行时仍提示“Permission denied”?
A:可能原因有两个:① 文件所有者不是当前用户,需用chown命令修改所有者(如chown $USER:$USER script.sh);② 文件系统挂载时设置了noexec选项(如/tmp分区),需将文件移动到支持执行的分区(如/home)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/26303.html