前端学习 linux —— shell 编程
Posted mb6231a533e840b
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端学习 linux —— shell 编程相关的知识,希望对你有一定的参考价值。
前端学习 linux - shell 编程
shell
原意是“外壳”,与 kernel
(内核)相对应,比喻内核外的一层,是用户和内核沟通的桥梁。shell 有很多种,国内通常使用 bash
。
第一个 shell 脚本
创建 hello-world.sh
文件,内容如下:
test11@pjl:~/tmp$ vim hello-world.sh
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 test11 31 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 test11 31 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 test11 31 6月 17 16:18 hello-world.sh
test11@pjl:~/tmp$ sh hello-world.sh
hello world
shell 注释
- 单行注释:
# 内容
- 多行注释:
:<<!
内容1
内容2
内容N
!
变量
系统变量
例如 $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
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
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: 合格linux运维人员必会的30道shell编程面试题及讲解什么是Shell?Shell脚本是什么?shell脚本执行过程?学习Shell编程必看!