编写 Shell 脚本的过程
-
创建脚本文件
vi 文件名.sh
- 在文件的第一行必须指定解释器:
#!/bin/bash
-
提升权限
- 新创建的
.sh
文件默认权限通常是664
(-rw-rw-r--
),没有可执行权限(x
)。 - 使用
chmod
命令添加可执行权限:chmod 777 文件名.sh
(赋予所有用户读、写、执行权限)- 或更安全的方式:
chmod u+x 文件名.sh
(仅赋予文件所有者执行权限)
- 新创建的
-
运行脚本
./文件名.sh
(使用路径方式执行)
Shell 编程关键点:
- 定义变量:
- 变量名=值 (等号两边绝对不能有空格)
a=10
name="hello"
- 使用变量:
echo $a
(使用$
符号引用变量)
- 输入变量:
read a
(从键盘读取输入,赋值给变量a
)
- 取消变量:
unset a
(取消变量a
的定义,该命令的位置不影响其效果)
- 只读变量:
readonly a
(将变量a
设置为只读,之后不能修改其值,也不能unset
)
- 预定义变量:
echo $0
:打印当前执行的脚本文件名echo $1
:打印执行脚本时传入的第一个参数echo $@
:打印执行脚本时传入的所有参数echo $#
:打印执行脚本时传入的参数个数
- 数学运算:
- 使用
expr
命令或$(( ))
语法 expr 1 + 2
(运算符两边必须有空格)result=$((a + b))
- 使用
- 关系运算符(用于条件判断
[ ]
或[[ ]]
中):-eq
(等于),-ne
(不等于),-gt
(大于),-lt
(小于),-ge
(大于等于),-le
(小于等于)
- 文件测试运算符(用于条件判断):
-x file
:判断文件是否有可执行权限-f file
:判断是否为普通文件-d file
:判断是否为目录
- 流程控制:
if
,while
,for
,case
编写 C 语言代码的过程
-
创建源代码文件
vi 文件名.c
-
编译代码
- 使用
gcc
(GNU Compiler Collection) 编译器将源代码编译成可执行文件。 gcc 文件名.c -o 输出的可执行文件名
- 例如:
gcc hello.c -o hello
会生成一个名为hello
的可执行文件。
- 使用
-
运行程序
- 直接运行生成的可执行文件:
./输出的可执行文件名
- 例如:
./hello
- 直接运行生成的可执行文件:
关键点:
- 编译后生成的可执行文件默认就具有可执行权限(通常是
775
,即-rwxrwxr-x
),因此不需要像 Shell 脚本一样额外使用chmod
命令来提升权限。
总结对比
步骤 | Shell 脚本 | C 程序 |
---|---|---|
1. 创建 | vi 文件名.sh |
vi 文件名.c |
2. 编译/授权 | chmod +x 文件名.sh |
gcc 文件名.c -o 输出名 |
3. 运行 | ./文件名.sh |
./输出名 |
核心区别:
- Shell 是脚本语言,需要解释器直接执行源文件,因此源文件本身需要可执行权限。
- C 是编译型语言,源代码需要先被编译器(
gcc
)翻译(编译和链接)成机器码,生成一个新的、独立的可执行文件。这个新的可执行文件天生就拥有执行权限。