1、Shell编程概述
Shell是一个命令行解释器,它接收应用程序或用户的命令,然后调用操作系统内核。
Shell还是一个功能强大的编程语言,易编写、易调试、灵活性强。
①Linux系统提供的Shell解析器
[root@hadoop101 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
其中最常用的是/bin/sh和/bin/bash
②bash和sh的关系
[root@apple w]# ll /usr/bin | grep bash$
-rwxr-xr-x. 1 root root 964544 4月 11 2018 bash
lrwxrwxrwx. 1 root root 4 7月 9 16:42 sh -> bash
sh是bash的软链接
③Linux默认的解析器是bash
[root@apple w]# echo $SHELL
/bin/bash
④Shell语法总述
2、Shell编程HelloWorld
①创建脚本文件
通常以.sh作为扩展名。
②脚本内容
第一行指定当前脚本的解析器:
#!/bin/bash
实现具体功能:
echo "hello world"
③Shell脚本的运行方式
命令名 | 在当前进程运行 | 新建子进程运行 |
---|---|---|
source | √ | |
. | √ | |
sh | √ | |
bash | √ | |
chmod +x后直接运行 | √ |
其中“.”是source的另一种写法。在当前进程中发布的全局变量可以在当前进程的其他脚本中继续沿用,也可以在子进程中使用;但是子进程export发布的变量仅限于子进程内部使用。
从上面进程树中能够看到,sh、bash、直接运行这三种方式确实是开辟新的子进程运行脚本中的代码。
3、变量
①系统预定义变量
常用系统变量包括:
U S E R 、 USER、
U
S
E
R
、
HOME、
P W D 、 PWD、
P
W
D
、
SHELL等,可以使用echo命令输出它们的值。
②使用set命令查看所有变量
ABRT_DEBUG_LOG=/dev/null
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
……
③自定义变量
[1]基本语法
(1)定义变量
USER_NAME=tom
(2)撤销变量
[root@apple ~]# USER_NAME=tom
[root@apple ~]# echo $USER_NAME
tom
[root@apple ~]# unset USER_NAME
[root@apple ~]# echo $USER_NAME
(3)声明静态变量
[root@apple ~]# readonly COMPANY_NAME=atguigu
[root@apple ~]# echo $COMPANY_NAME
atguigu
[root@apple ~]# COMPANY_NAME=uuu
-bash: COMPANY_NAME: 只读变量
[root@apple ~]# unset COMPANY_NAME
-bash: unset: COMPANY_NAME: 无法反设定: 只读 variable
不能修改,不能撤销
[2]语法规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
- 等号两侧不能有空格
- 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
- 变量的值如果有空格,需要使用双引号或单引号括起来。
④特殊变量
[1]$n
n是数字,$0代表当前脚本名称。从
1 开 始 代 表 对 应 的 脚 本 参 数 。 从 1开始代表对应的脚本参数。从
1
开
始
代
表
对
应
的
脚
本