shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。
脚本以 #!/bin/bash 开头(指定解析器),第二行进行脚本的编写。
目录
- shell分类
- 编写规范
- 文件命名规范:
- Bash 常用快捷键
- 输入输出重定向
- 输入重定向
- 输出重定向
- /dev/null 文件
- 多命令顺序执行
- shell脚本的执行
- 第一种:给文件增加执行权限方式执行shell脚本
- 第二种:(了解):通过Bash调用执行脚本方式执行shell脚本
- 入门案例
- 1.编写shell脚本
- 2.脚本执行方式
- shell变量
- 系统预定义变量
- 示例
- 查看系统变量的值(全局):`echo $HOME `
- 查看系统全局变量:`env`
- 显示当前Shell中的所有变量:`set`
- 环境变量
- 设置环境变量
- 环境变量查询和删除
- 系统默认环境变量
- 位置参数变量:
- 预定义变量:
- “$?”
- “$”和“”和“ ”和“!”
- 用户自定义变量
- 基本语法
- 变量定义规则
- 变量定义
- 变量调用
- 变量查看
- 变量删除
- 示例
- 变量的四种引用方式
- shell中特殊符号
- 单引号和双引号
- 反引号
- 只读变量:
- 接受键盘输入:
- 示例
- Shell运算符
- 算数运算符
- 关系运算符
- 示例:判断当前输入的用户是否存在。如果存在则提示“用户存在”否则提示“用户不存在”。
- 逻辑运算符
- 字符串运算符
- 文件测试运算符(重点)
shell分类
cat /etc/shells
在linux中有很多类型的shell,不同的shell具备不同的功能,shell还决定了脚本中函数的语法,Linux中默认的shell是 / b a s h / b a s h ( 重 点 ),流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。
查看Shell默认的解析器是bash
echo $SHELL
编写规范
#!/bin/bash[指定告知系统当前这个脚本要使用的shell解释器]Shell相关指令
文件命名规范:
文件名.sh .sh是linux下bash shell 的默认后缀
Bash 常用快捷键
输入输出重定向
输入重定向
是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)
输出重定向
(通俗的讲,重定向输出就是把要输出的文件信息写入到一个文件中去,而不是将要输出的文件信息输出到控制台(显示屏),在linux中,默认的标准输出设备是控制台(或称为显示器),用户输出的信息默认情况下都会显示到控制台
- &表示全部文件,文件不管对错,
- 1表示标准输出文件,
- 2表示标准错误输出。
/dev/null 文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null 中
[root@localhost ~]$command > dev/null
多命令顺序执行
shell脚本的执行
[root@localhost ~]$ vim test.sh#!/bin/bashecho “hello world”
第一种:给文件增加执行权限方式执行shell脚本
[root@localhost ~]$ chmod u+x test.sh[root@localhost ~]$ ./test.sh#绝对路径或相对路径执行
第二种:(了解):通过Bash调用执行脚本方式执行shell脚本
[root@localhost ~]$ bash test.sh
入门案例
1.编写shell脚本
创建目录用于存放shell脚本文件
mkdir scriptscd scripts/
使用vim命令创建xxx.sh文件
vim hello.sh
编写xxx.sh文件内容(第一行#!/bin/bash,第二行开始编写脚本代码)
#!/bin/bashecho "hello,world"
2.脚本执行方式
bash执行方式
bash hello.sh
sh执行方式
sh hello.sh
添加权限执行
chmod +x hello.sh
# xxx.sh文件添加可执行权限chmod +x xxx.sh# xxx.sh文件当前用户添加可执行权限chmod a+x xxx.sh# 最高权限chmod 777 xxx.sh
当前路径(相对路径)执行 ./:
./hello.sh
绝对路径执行:
/root/scripts/hello.sh
source执行脚本:
source hello.sh
、source /root/scripts/hello.sh
. 执行脚本:
. hello.sh
shell变量
在一个脚本周期内,其值可以发生改变的量就是变量。分类如下
- 用户自定义变量: 这种变量是最常见的变量,由用户自由定义变量名和变量的值。
- 环境变量: 这种变量中主要保存的是和系统操作环境相关的数据,比如当前登录用户,用户的家目录,命令的提示符等。不是太好理解吧,那么大家还记得在Windows中,同一台电脑可以有多个用户登录,而且每个用户都可以定义自己的桌面样式和分辨率,这些其实就是Windows的操作环境,可以当做是Windows的环境变量来理解。环境变量的变量名可以自由定义,但是一般对系统起作用的环境变量的变量名是系统预先设定好的。
- 位置参数变量: 这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
- 预定义变量: 是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
系统预定义变量
- 常用系统变量
$ HOME、$ PWD、$ SHELL、$ USER等 - 环境变量
- export:查看环境变量
- echo $PATH:输出环境变量的值
- help echo:查看echo命令的帮助信息
示例
查看系统变量的值(全局):echo $HOME
查看系统全局变量:env
显示当前Shell中的所有变量:set
环境变量
设置环境变量
[root@localhost ~]$export age="18"#使用export声明的变量即是环境变量
环境变量查询和删除
env命令和set命令的区别:set命令可以查看所有变量,而env命令只能查看环境变量。
[root@localhost ~]$ unset gender #删除环境变量gender[root@localhost ~]$ env | grep gender
系统默认环境变量
[root@localhost ~]$ envHOSTNAME=localhost.localdomain#主机名SHELL=/bin/bash #当前的shellTERM=linux#终端环境HISTSIZE=1000 #历史命令条数SSH_CLIENT=192.168.4.1594824 22 #当前操作环境是用ssh连接的,这里记录客户端ipSSH_TTY=/dev/pts/1#ssh连接的终端时pts/1USER=root #当前登录的用户..........更多参数可以使用set和env命令查看.............
位置参数变量:
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0表示当前 Shell 脚本程序的名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10} |
$* | 这个变量代表命令行中所有的参数,$把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 这个变量代表命令行中所有参数的个数 |
$1 是你给你写的shell脚本传的第一个参数,$2 是你给你写的shell脚本传的第二个参数…
[root@localhost sh]$ vim test.sh#!/bin/shecho "shell脚本本身的名字: $0"echo "传给shell的第一个参数: $1"echo "传给shell的第二个参数: $2"
∗ 会 把 接 收 的 所 有 参 数 当 成 一 个 整 体 对 待 , 而*会把接收的所有参数当成一个整体对待,而∗会把接收的所有参数当成一个整体对待,而@则会区分对待接收到的所有参数。举个例子:
[root@localhost sh]$ vi parameter2.sh#!/bin/bashfor i in"$*"#定义for循环,in后面有几个值,for会循环多少次,注意“$*”要用双引号括起来#每次循环会把in后面的值赋予变量i#Shell把$*中的所有参数看成是一个整体,所以这个for循环只会循环一次doecho "The parameters is: $i"#打印变量$i的值donex=1#定义变量x的值为1for y in"$@"#同样in后面的有几个值,for循环几次,每次都把值赋予变量y#可是Shel1中把“$@”中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次doecho "The parameter$x is: $y"#输出变量y的值x=$(( $x +1 ))#然变量x每次循环都加1,为了输出时看的更清楚done
预定义变量:
预定义变量 | 作用 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
$” />“$?”
“$ ” 和 “”和“”和“!”[root@localhost sh]$ vi variable.sh 用户自定义变量基本语法
变量定义规则
变量定义
变量调用
变量查看
变量删除
示例
变量的四种引用方式
shell中特殊符号单引号和双引号
反引号
只读变量:
接受键盘输入:
变量名: 示例
Shell运算符在shell中,运算符和其他编程脚本语言一样,常见的有算数运算符、关系运算符、逻辑运算符、字符串运算符、文件测试运算符等 算数运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
假定变量 a 为 10,变量 b 为 20
注意:条件表达式要放在方括号之间,并且要有空格,必须写成 [ $a == $b ]。
关系运算符关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
|