本文引导
Shell学习
shell概述
shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
shell解释器
- Linux提供的解释器有
[shaofei@upuptop-pc ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
- bash和sh的关系
[shaofei@upuptop-pc bin]$ ll | grep bash
-rwxr-xr-x 1 root root 964600 Aug 8 2019 bash
lrwxrwxrwx 1 root root 4 Oct 28 2019 sh -> bash
- Centos默认的解析器是bash
[shaofei@upuptop-pc bin]$ echo $SHELL
/bin/bash
Shell脚本入门
-
脚本格式
脚本以 #!/bin/bash 开头(指定解析器) -
第一个shell脚本
[shaofei@upuptop-pc sh]$ touch helloworld.sh
[shaofei@upuptop-pc sh]$ vim helloworld.sh
#!/bin/bash
echo "helloworld"
- 脚本的常用执行方式
(1) 采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
[shaofei@upuptop-pc sh]$ sh helloworld.sh
helloworld
[shaofei@upuptop-pc sh]$ bash helloworld.sh
helloworld
(2)采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
[shaofei@upuptop-pc sh]$ chmod 777 helloworld.sh
[shaofei@upuptop-pc sh]$ ./helloworld.sh
helloworld
[shaofei@upuptop-pc sh]$ /home/shaofei/sh/helloworld.sh
helloworld
注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。
- 多命令处理
[shaofei@upuptop-pc sh]$ touch batch.sh
[shaofei@upuptop-pc sh]$ vim batch.sh
#!/bin/bash
echo 'hello'
cd /home/shaofei/sh
echo 'cccc' > a.txt
Shell中的变量
系统变量
- 常用的系统变量
P W D , PWD, PWD,HOME, U S E R , USER, USER,SHELL等
- 案例
[shaofei@upuptop-pc sh]$ echo $HOME
/home/shaofei
[shaofei@upuptop-pc sh]$ echo $PWD
/home/shaofei/sh
[shaofei@upuptop-pc sh]$ echo $USER
shaofei
显示当前Shell中所有变量:set
[shaofei@upuptop-pc sh]$ set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
………………
自定义变量
-
基本语法
a. 定义变量: 变量名=变量值
b. 撤销变量: unset 变量名
c. 声明静态变量: readonly 变量, 注意不能unset -
定义规则
a. 变量名可以使用字母、数字、下划线组成,但是不能以数字开头。环境变量建议全部大写
b. 等号前后不能有空格
c. 在bash中,变量类型默认是字符串类型,无法直接进行数值计算
d. 变量的值如果有空格必须要用"双引号"引起来 -
案例
创建变量A并赋值为5
[shaofei@upuptop-pc sh]$ A=5
[shaofei@upuptop-pc sh]$ echo $A
5
给变量A重新赋值为9
[shaofei@upuptop-pc sh]$ A=9
[shaofei@upuptop-pc sh]$ echo $A
9
撤销变量A
[shaofei@upuptop-pc sh]$ unset A
[shaofei@upuptop-pc sh]$ echo $A
创建静态的变量B
[shaofei@upuptop-pc sh]$ readonly B=2
[shaofei@upuptop-pc sh]$ echo $B
2
静态变量不能重新赋值
[shaofei@upuptop-pc sh]$ B=10
-bash: B: readonly variable
静态变量不能unset
[shaofei@upuptop-pc sh]$ unset B
-bash: unset: B: cannot unset: readonly variable
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
[shaofei@upuptop-pc sh]$ C=1+2
[shaofei@upuptop-pc sh]$ echo $C
1+2
变量的值如果有空格,需要使用双引号或单引号括起来
[shaofei@upuptop-pc sh]$ D=I LOVE YOU
-bash: LOVE: command not found
[shaofei@upuptop-pc sh]$ D="I LOVE YOU"
[shaofei@upuptop-pc sh]$ echo $D
I LOVE YOU
可把变量提升为全局环境变量,可供其他Shell程序使用
[shaofei@upuptop-pc sh]$ vim helloworld.sh
在helloworld.sh文件中增加echo $B
#!/bin/bash
echo "helloworld"
echo $B
没有打印$B的值
[shaofei@upuptop-pc sh]$ sh helloworld.sh
helloworld
修改B变量为全局环境变量
[shaofei@upuptop-pc sh]$ export B
[shaofei@upuptop-pc sh]$ sh helloworld.sh
helloworld
2
特殊变量:$n
- 基本语法
$n
功能描述:n为数字,$0 代表该脚本名称,$1- 9 代 表 第 一 到 第 九 个