结构
shell脚本概述
-
shell的作用
-
shell编程规范
-
重定向与管道
shell脚本变量
-
自定义变量
-
特殊变量
shell脚本概述
shell脚本的概念
-
将要执行的命令按顺序保存到一个文本文件
-
给该文件可执行权限
-
可结合各种Shell控制语句以完成更复杂的操作
shell脚本应用场景
-
重复性操作
-
交互性任务
-
批量事务处理
-
服务运行状态监控
-
定时任务执行
shell的作用2-1
shell的作用-------命令解释器,“翻译官”
介于系统内核与用户之间,负责解释命令行
shell的作用2-2
用户的登录shell
-
登录后默认使用的shell程序,一般为/bin/bash
-
不同shell的内部指令、运行环境等会有所区别
[root@localhost ~]# catletclshells
/bin/sh
/bin/bash/sbin/nologin
shel1脚本编程规范与变量
什么是shell
shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的,我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。
shell的作用
Linux系统中的shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
常见的shell解释器程序有很多种,使用不同的shell时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells文件可以了解当前系统所支持的shell 脚本种类。
[ root@localhost ~]#cat letc/ shells
/bin/sh#是bash命令的软链接(已经被/bin/bash所替换)
/ bin/bash基准于GNU的框架下发展出的shell。
/usr/bin/sh已经被bash所替换。
/usr/bin/bash #centos和redhat系统默认使用bash shell
/bin/tcsh #csh的增强版,与csh完全兼容整合了csh,提供更多的功能。
/bin/csh已经被/bin/bash所替换―(整合c shell,提供更多的功能)
shell脚本执行
shell脚本的执行通常有以下几种方式
方法一:当前路径(决定路径与相对路径)下执行脚本(要有执行权限)
/ home/ first.sh或者./first.sh
方法二:sh . bash脚本文件路劲(这种方式可以不对脚本文件添加执行权限)
bash first.sh或sh first.sh
方法三: source脚本文件路劲(可以没有执行权限)
source first.sh
方法四:其他方法
sh < first.sh或者cat first.sh |sh (bash)
编写第一个shell脚本3-1
编写脚本代码
使用vim文本编辑器
每行一条Linux命令,按执行顺序一次编写
[root@localhost ~]# vim first.sh
cd /boot/
pwd
ls -lh vml*
更完善的脚本构成3-2
●脚本声明
●注释信息
●可执行语句
[root@localhost ~]# vim lfirst.sh
#!/bin/bash
This is my first Shell-Script.
cd /boot
echo "当前的目录位于:"
pwd
echo"其中以vml开头的文件包括:"
ls -lh vml*
重定向与管道操作3-1
交互式硬件设备
●标准输入:从该设备接收用户输入的数据
●标准输出:通过该设备向用户输出数据
●标准错误:通过该设备报告执行出错信息
重定向与管道操作3-2
重定向操作
重定向与管道操作3-3
管道操作符号“|”
将左侧的命令输出结果,作为右侧命令的处理对象
cmd1 | cmd2 【...|cmdn】
shell变量的作用、类型
变量的作用
●用来存放系统和用户需要使用的特定参数(值)
●变量名:使用固定的名称,由系统预设或用户定义
●变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
●自定义变量:由用户自己定义、修改和使用
●特殊变量:环境变量,只读变量,位置变量,预定义变量
自定义变量4-1
定义一个新的变量
●变量名以字母或下划线开头,区分大小写,建议全大写
变量名=变量值
查看变量的值
echo $变量名
自定义变量4-2
赋值时使用引号
-
双引号:允许通过$符号引用其他变量值
-
单引号:禁止引用其他变量值,$视为普通字符
-
反撇号:命令替换,提取命令执行后的输出结果
从键盘输入内容为变量赋值
read [-p“提示信息"]变量名
自定义变量4-3
设置变量的作用范围
格式1:export 变量名...< 两种格式可以混合使用>格式2:export 变量名=变量值 ..
[root@localhost ~]# echo ""$Product $Version"
Benet 6.0
[root@localhost ~]# export Product Version (导出为全局变量)
[root@localhost ~]# bash
[root@localhost ~j# echo $Product $Version"(子程序引用全局)
Benet 6.0
[root@localhost ~]# exit
交互式定义变量
read命令:除了上述赋值操作以外,还可以使用Bash 的内置命令read来给变量赋值。用来提示用户输入信息,从而实现简单的交互过程。执行时将从标准输入设备(键盘)读入一行内容,并以空格为分隔符,将读入的各字段依次赋值给指定的变量(多余的内容赋值给最后一个变量)。若指定的变量只有一个,则将整行内容赋值给此变量。
[ root@localhost ~]#read test
123 //等待用户输入,把输入的值赋子test变量[root@localhost ~]#echo $test
一般来说为了使交互式操作的界面更加友好,提高易用性,read命令可以结合"-p"选项来设置提示信息,以便告知用户应该输入什么内容等相关事项[root@localhost ~]# read -p "请输入你的姓名:" name
请输入你的姓名:name
[rootelocalhost ~]#echo $name
name
交互式定义变量( read)
-p提示用户的信息
-n定义字符数
-s不显示用户输入的内容,常用于输入密码read -s -p "input your password:" pass
-t定义超时时间,超过多长时间没输自动退出
从文件读取内容赋值给变量
[root@server myscripts]#echo 192.168.100.100 > ip.txt
[root@server myscripts]#cat ip.txt
192.168.100.100
[root@server myscripts] # read -p "input your ip:" IP < ip.txt
[root@server myscripts]#echo SIP
192.168.100.100
stty -echo //关闭屏幕回显
stty echo //开启屏幕回显
变量的作用范围
默认情况下,新定义的变量只在当前的 Shell环境中有效,因此称为局部变量,当进入子程序或新的子shell 环境时,局部变量将无法再使用
[root@localhost ~]bash #进入了shel1环境
[ root@localhost ~]#
[root@localhost ~]echo $name
[root@localhost~]#echo $test
export命令
为了使用户定义的变量在所有的子 shell环境中能够继续使用,减少重复设置工作,可以通过内部命令
export:将指定的变量导出为全局变量。用户可以同时指定多个变量名称作为参数(无须使用""="符号),变最名之间以空格分隔。
[root@localhost ~]#exit
exit
[root@localhost ~]#export name test
[root@localhost ~]bash
[ root@localhost ~]#echo $name $testexithumajun 123 或
[ root@localhost ~]#echo "$Product $Version”
Benet 6.0
[root@localhost ~]# export Product version#导出为全局变量
[root@localhost ~]#bash
[root@localhost ~]#echo "$Product sVersion"#子程序引用全局变量
Benet 6.0
[ root@localhost ~]#exit
使用export导出全局变量的同时,也可以为变量进行赋值,这样在新定义全局变量时就不需要提前赋值了
env查看用户当前环境变量
export ABC=123
再次env就能看到了
export -n ABC 取消定义的全局变量变成局部变量
自定义变量4-4
整数变量的运算
expr 变量1 运算符 变量2 [运算符 变量3]...
常用运算符
●加法运算:+
●减法运算:-
●乘法运算:*
●除法运算:/
●求模(取余)运算:%
特殊的Shell变量4-2
只读变量
●用于变量值不允许被修改的情况
[root@localhost ~]# name=cloud
[root@localhost -j# readonly namel设置为只读变量
[root@localhost ~]# echo $name
cloud
[root@localhost -]# name=yun
-bash: name: readonly variable//只读变量不可以被重新赋值
[root@localhost一]#
[root@localhost -]# unset name//只读变量不可以被删除
-bash: unset: name: cannot unset: readonly variable
特殊的Shell变量4-4
预定义变量
$#:命令行中位置变量的个数
$*:所有位置变量的内容
$?: 上一条命令执行后逡回的状态,当返回状态值为0时表示执行正常,非O值表示执行异常或出错
$0:当前执行的进程/程序名
总结
Shell的作用与应用场景
Shell脚本的编写规范与执行方法
重定向与管道的作用与使用方法
自定义变量赋值时单引号、双引号、反撇号的使用方法
数值变量的常用运算符: +、-、l*、l、%
环境变量,只读变量、位置变量、预定义变量的用途