前端学习 linux —— shell 编程

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述前端学习 linux —— shell 编程相关的知识,希望能为你提供帮助。
前端学习 linux - shell 编程??shell??? 原意是“外壳”,与 ??kernel???(内核)相对应,比喻内核外的一层,是用户和内核沟通的桥梁。shell 有很多种,国内通常使用 ??bash??。
第一个 shell 脚本
创建 ??hello-world.sh?? 文件,内容如下:

test11@pjl:~/tmp$ vim hello-world.sh

#!/bin/bash
echo hello world

第一行指定 ??shell?? 的类型:
test11@pjl:~/tmp$ echo $SHELL
/bin/bash

Tip:通常约定以 ??sh?? 结尾。提前剧透:
test11@pjl:~/tmp$ sh hello-world.xx
hello world

执行 ??sh?? 文件,提示权限不够:
test11@pjl:~/tmp$ ./hello-world.sh
-bash: ./hello-world.sh: 权限不够

test11@pjl:~/tmp$ ll
-rw-rw-r-- 1 test11 test1131 6月17 16:18 hello-world.sh

增加可执行权限:
test11@pjl:~/tmp$ chmod u+x hello-world.sh


test11@pjl:~/tmp$ ll
# hello-world.sh 变绿了
-rwxrw-r-- 1 test11 test1131 6月17 16:18 hello-world.sh*

使用相对路径方式再次执行即可:
test11@pjl:~/tmp$ ./hello-world.sh
hello world

也可以使用绝对路径执行:
test11@pjl:~/tmp$ /home/test11/tmp/hello-world.sh
hello world

通过 ??sh xx.sh?? 无需可执行权限也可以执行。
Tip:下文还会使用 ??bash xx.sh?? 的执行方式。
首先删除可执行权限:
test11@pjl:~/tmp$ chmod u-x hello-world.sh
test11@pjl:~/tmp$ ll
总用量 20
-rw-rw-r-- 1 test11 test1131 6月17 16:18 hello-world.sh

test11@pjl:~/tmp$ sh hello-world.sh
hello world

shell 注释
  • 单行注释:??# 内容??
  • 多行注释:
:< < !
内容1
内容2
...
内容N
!

变量
系统变量【前端学习 linux —— shell 编程】例如 ??$SHELL?? 就是系统变量:
test11@pjl:~/tmp$ echo $SHELL
/bin/bash

可以通过 ??set??? 查看系统变量。例如过滤 ??SHELL?? 系统变量:
test11@pjl:~/tmp$ set |more |grep SHELL
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor

自定义变量定义变量??age??并输出:
test11@pjl:~/tmp$ vim demo.sh

test11@pjl:~/tmp$ sh demo.sh
age=18
age=18

内容如下:
test11@pjl:~/tmp$ cat demo.sh
#!/bin/bash
age=18
echo age=$age
echo "age=$age"

:1. 定义变量不要在等号前后加??空格???;2. 使用变量要使用 ??$??;3. 最后两行输出效果相同
# `age=18` 改为 `age= 18`
test11@pjl:~/tmp$ sh demo.sh
demo.sh: 2: 18: not found
age=
age=

使用 ??unset?? 可以销毁变量。请看示例:
test11@pjl:~/tmp$ vim demo.sh
test11@pjl:~/tmp$ sh demo.sh
age=18
age=

# 脚本内容
test11@pjl:~/tmp$ cat demo.sh
#!/bin/bash
age=18
echo age=$age
unset age
echo age=$age

:销毁变量 age 后再使用该变量,没有报错。
通过 ??readonly??? 定义静态变量,不能 ??unset??。请看示例:
test11@pjl:~/tmp$ vim demo.sh
test11@pjl:~/tmp$ sh demo.sh
age=18
demo.sh: 4: unset:

    推荐阅读