目录
一、Shell脚本概述
1.1 Shell的作用-1
■ shel的作用—命令解释器,“翻译官”
- 介于系统内核与用户之间,负责解释命令行
1.2 Shell的作用-2
■ 用户的登录Shell
- 登录后默认使用的shell程序,一般为/bin/bash
- 不同shell的内存指令、运行环境等会有所区别
[root@localhost -]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologi
1.3 编写第一个shell脚本-1
■ 编写脚本代码
- 使用vim文本编辑器
- 每行—条Linux命令,按执行顺序依次编写
[root@localhost ]# vim first.sh
cd /boot/
pwd
Is -Ih vml*
■ 赋予可执行权限
- 使脚本具有可执行属性
[root@localhost -]# chmod +x first.sh
1.4 编写第一个shell脚本-2
■ 执行脚本文件
- 方法脚本文件路径(绝对路径与相对路径)
[root@ local host ]# ./first.sh
- 方法二:sh脚本文件路径
[root@localhost] # sh first.sh
- 方法三:source脚本文件路径
[root@localhost] # source first.sh
1.5 编写第一个shell脚本-3
■ 更完善的脚本构成
- 脚本声明
- 注释信息
- 可执行语句
[root@localhost ]# vim /first.sh
#!/bin/bash
# This is my first Shell-Script,
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以vml开头的文件包括: Is -lh vml*
1.6 重定向与管道操作-1
■ 交互式硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错信息
1.7 重定向与管道操作-2
■ 重定向操作
1.8 重定向与管道操作-3
■ 重定向操作
1.9 重定向与管道操作-4
■ 管道操作符号"|"
- 将左侧的命令输出结果,作为右侧命令的处理对象
cmd | cmd2 [... | cmdn]
[root@localhost -]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
teacher:x:500:500:BENET Linux Teacher:/home/teacher:/bin/bash
[root@localhost ] # grep “bash$” /etc/passwd | awk -F: ‘{print $1, $7}’
root /bin/bash
二、Shell脚本变量
2.1 Shell变量的作用、类型
■ 变量的作用
- 用来存放系统和用户需要使用的特定参数(值)
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、_系统环境的变化而变化
■ 变量的类型 - 自定义变量:由用户自己定义、修改和使用
- 特殊变量:环境变量,只读变量,位置变量,预定义变量
2.2 自定义变量-1
■ 定义一个新的变量
- 变量名以字母或下划线开头,区分大小写,建议全大写
■ 查看变量的值
echo $变置名
[root@localhost ~]# Products Python
[root@ local host ~]# Version=2.7.13
[root@localhost ~]# echo $Product
Python
[root@ local host ~]# echo $Product $Version Python 2.7.13
2.3 自定义变量-2
■ 赋值时使用引号
- 双引号:允许通过$符号引用其他变量值
- 单引号:禁止引用其他变量值,$视为普通字符
- 反撇号:命令替换,提取命令执行后的输出结果
■ 从键盘输入内容为变量赋值
read [-p "提示信息"]变量名
2.4 自定义变量-3
■ 设置变量的作用范围
格式1: export变量名…
格式2: export变置名=变置值...
[root@localhost -]# echo "SProduct $Version’ Benet 6.0
[root@localhost ] # export Product Version
[root@localhost ~j# basK?
[root@localhost ~j# echo "SProduct $Version Benet 6.0
2.5 自定义变量-4
■ 整数变量的运算
expr 变量1 运算符 变量2 [运算符 变量3]...
■ 常用运算符
- 加法运算:+
- 减法运算:_
- 乘法运算:*
- 除法运算:/
- 求模(取余)运算:%
2.6 特殊的Shell变量-1
■ 环境变量
- 由系统提前创建,用来设置用户的工作环境
- 配置文件:/etc/profile、 /.bash—profile
■ 常见的环境变量
- PWD、 PATH
- USER、SHELL、 HOME
[root@localhost ]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin
[root@localhost ]# PATH="$PATH:/root"
iroot@localhost j# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/^in:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin:/root
2.7 特殊的Shell变量-2
■ 只读变量
- 用于变量值不允许被修改的情况
[root@localhost -]# name=cloud
[root@localhost -]# readonly name //设置为只读变量
[root@localhost ~j# echo $name
cloud
[root@localhost ] # name=yun
-bash: name: readonly variable //只读变量不可以被重新赋值 [root@localhost~]#
[root@localhost -]# unset name //只读变量不可以被删除
-bash: unset: name: cannot unset: readonly variable
2.8 特殊的Shell变量-3
■ 位置变量
- 表示为$n,n为1-9之间的数字
[root@localhost ]# ./myprog.sh one two three four five
2.9 特殊的Shell变量-4
■ 预定义变量
- $#:命令行中位置变量的个数
- $*:所有位置变量的内容
- $?:上一条命令执行后返回的状态,当返回状态值为o时 表示执行正常,非o值表示执行异常或出错
- $0:当前执行的进程/程序名
■ 预定义变量
[root@localhost -]# vim mybak.sh
#!/bin/bash
TARFILE=beifen-'date +%s'.tgz
tar zcf $TARFILE $* &> /dev/null
tcho "已执行$0脚本, "
echo "共完成$#个对象的备份"
echo •具体内容包括:
[root@localhost -]# chmod +x mybak.sh
[root@localhost ]# ./mybak.sh /etc/passwd /etc/shadow 已执行./mybak.sh脚本,
共完成2个对象的备份
具体包括:/etc/passwd /etc/shadow