shell基础
概述
Shell是一个命令解释器,接收应用程序/用户命令,然后调用操作系统内核
Shell解析器
Linux提供的Shell解析器有:
1
2
3
4
5
6
7[lvxiaoyi@localhost sheellStudy]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologinbash和sh的关系
1
2
3
4
5[lvxiaoyi@localhost bin]$ ll /bin/ | grep bash
-rwxr-xr-x. 1 root root 964544 Apr 11 2018 bash
lrwxrwxrwx. 1 root root 10 Oct 13 07:38 bashbug -> bashbug-64
-rwxr-xr-x. 1 root root 6964 Apr 11 2018 bashbug-64
lrwxrwxrwx. 1 root root 4 Oct 13 07:38 sh -> bash我们能够看到sh是bash的软连接,最终调用的还是bash
Centos默认的解析器是bash
1
2
3[lvxiaoyi@localhost bin]$ echo $SHELL
/bin/bash bash是一个二进制文件,里面存放这各种命令
1
2
3
4
5
6
7
8
9
10[lvxiaoyi@localhost bin]$ hexdump -n 100 bash
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0002 003e 0001 0000 d3e1 0041 0000 0000
0000020 0040 0000 0000 0000 b080 000e 0000 0000
0000030 0000 0000 0040 0038 0009 0040 001d 001c
0000040 0006 0000 0005 0000 0040 0000 0000 0000
0000050 0040 0040 0000 0000 0040 0040 0000 0000
0000060 01f8 0000
0000064
Shell脚本入门
脚本格式
1 | #!/bin/bash |
单纯的#是注释
#!是系统的标识符,让系统知道后面的是特殊命令
/bin/bash 表示让指定系统使用bash来作为这个文件的解释器
案例
helloWorld
1
2
3
4
5
6
7
8[lvxiaoyi@localhost sheellStudy]$ vim helloWorld.sh
#!/bin/bash
echo "helloWorld"
[lvxiaoyi@localhost sheellStudy]$ bash helloWorld.sh
helloWorld脚本的常用执行方式
采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
1
2[lvxiaoyi@localhost sheellStudy]$ bash helloWorld.sh
helloWorld采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
1
2
3
4
5[lvxiaoyi@localhost sheellStudy]$ ./helloWorld.sh
bash: ./helloWorld.sh: Permission denied
[lvxiaoyi@localhost sheellStudy]$ chmod u+x helloWorld.sh
[lvxiaoyi@localhost sheellStudy]$ ./helloWorld.sh
helloWorld注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限(#!/bin/bash其实也没有起作用)。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。
执行系统命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21[lvxiaoyi@localhost sheellStudy]$ vim system.sh
#!/bin/bash
pwd
echo "hello"
touch cls.txt
echo "I love you" >> cls.txt
[lvxiaoyi@localhost sheellStudy]$ bash system.sh
/home/lvxiaoyi/sheellStudy
hello
[lvxiaoyi@localhost sheellStudy]$ ll
total 16
-rw-rw-r--. 1 lvxiaoyi lvxiaoyi 11 Oct 13 09:04 cls.txt
-rw-r--r--. 1 root root 68 Oct 13 07:52 for.sh
-rw-rwxr-x. 1 lvxiaoyi lvxiaoyi 30 Oct 13 09:00 helloWorld.sh
-rw-rw-r--. 1 lvxiaoyi lvxiaoyi 72 Oct 13 09:04 system.sh
[lvxiaoyi@localhost sheellStudy]$ cat cls.txt
I love youShell中的变量
系统变量
常用系统变量
$HOME、$PWD、$SHELL、$USER等
案例
查看系统变量的值
1
2[lvxiaoyi@localhost sheellStudy]$ echo $HOME
/home/lvxiaoyi显示当前Shell中所有变量:set
1
2
3
4
5
6
7
8
9[lvxiaoyi@localhost sheellStudy]$ set
BASH=/usr/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
...
SHELL=/bin/bash
_=-help
colors=/home/lvxiaoyi/.dircolors
自定义变量
基本语法
- 定义变量:变量=值(注意:等号两侧不能有空格)
- 撤销变量:unset 变量名
- 生命静态变量:readonly变量,注意:不能unset
自定义变量规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
- 等号两侧不能有空格
- 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
- 变量的值如果有空格,需要使用双引号或单引号括起来。
案例
自定义变量
1
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 吕小医's BLOG!