目录
1. shell的作用和历史
2. shell的常用功能
3. shell变量种类
3. shell脚本的运行
4. 编写简单的shell脚本
Shell的作用及常见种类
Shell的作用 -- 命令解释器,“翻译官”
Bash的常用功能
Tab键自动补齐
命令历史
命令别名
标准输入输出
重定向操作
管道操作
Bash的命令历史
命令历史
保存用户曾经执行过的命令操作
存放位置:~/.bash_history 文件
查看历史命令
使用↑、↓按键逐条翻看,允许编辑并重复执行
执行:history
清除历史命令
执行:history -c
Bash的命令历史
调用历史命令
!n:执行历史记录中的第n条命令
!str:执行历史记录中以“str”开头的命令
设置记录历史命令的条数
修改 HISTSIZE 参数(默认为1000条)
Vi /etc/profile 设置:HISTSIZE=200
Bash的命令别名
命令别名
为使用频率较高的复杂命令行设置简短的调用名称
存放位置:~/.bashrc
Bash的标准输入输出
交互式硬件设备
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器
Bash的重定向操作
改变标准输入、标准输出、标准错误的方向
类型操作符用途
重定向标准输入<将命令中接收输入的途径由默认的键盘更改为指定的文件
重定向标准输出>将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上
>>将命令执行的结果追加输出到指定文件
重定向标准错误2>清空指定文件的内容,并将标准错误信息保存到该文件中
2>>将标准错误信息追加输出到指定的文件中
重定向标准输出和
标准错误&>将标准输出、标准错误的内容全部保存到指定的文件中,而不是直接显示在屏幕上
Bash的管道操作
管道操作符号“|”
[root@localhost ~]# free –m | head -2
[root@localhost ~]# free –m | grep “Mem” | awk ‘{print $2,$4}’
Shell变量的应用
Shell变量
为灵活管理Linux系统提供特定参数,有两层意思:
1.变量名:使用固定的名称,由系统预设或用户定义
2. 变量值:能够根据用户设置、系统环境变化而变化
Shell变量的种类
用户自定义变量:由用户自己定义、修改和使用
环境变量:由系统维护,用于设置用户的Shell工作环境,只有极少数的变量用户可以修改
预定义变量:Bash预定义的特殊变量,不能直接修改
位置变量:通过命令行给程序传递执行参数
变量的赋值与引用
定义新的变量
变量名要以英文字母或下划线开头,区分大小写
格式:变量名=变量值
查看变量的值
格式:echo $变量名
[root@localhost ~]# DAY=Sunday
[root@localhost ~]# echo $DAY
从键盘输入内容为变量赋值
格式: read [-p "信息"] 变量名
结合不同的引号为变量赋值
双引号 “ ” :允许通过$符号引用其他变量值
单引号 ‘ ’ :禁止引用其他变量值,$视为普通字符
反撇号 ` ` :将命令执行的结果输出给变量
设置变量的作用范围
格式:export 变量名...
export 变量名=变量值 [...变量名n=变量值n]
清除用户定义的变量
格式:unset 变量名
变量赋值、引用和删除
[root@localhost ~]# echo $FILESVR
filesvr.lamp.com
[root@localhost ~]# export FILESVR
[root@localhost ~]# zsh
[root@localhost]~# echo $FILESVR
filesvr.lamp.com
[root@localhost]~# exit
[root@localhost root]# unset FILESVR
[root@localhost root]# echo $FILESVR
数值变量的运算
计算整数表达式的运算结果
格式:expr 变量1 运算符 变量2 ...[运算符 变量n]
expr的常用运算符
加法运算:+
减法运算: -
乘法运算: \*
除法运算: /
求模(取余)运算: %
环境变量
1.环境变量配置文件
全局配置文件:/etc/profile
用户配置文件:~/.bash_profile
2.查看环境变量
set命令可以查看所有的Shell变量,其中包括环境变量
环境变量
常见的环境变量:
$USER 、$LOGNAME
$UID 、 $SHELL 、$HOME
$PWD、 $PATH
$PS1、$PS2
查看环境变量
[root@localhost ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# PATH="/opt/bin:$PATH"
[root@localhost ~]# echo $PATH
/opt/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
位置变量
表示为 $n,n为1~9之间的数字
[root@localhost ~]# ./exam01 one two three four
$0:当前执行的进程/程序名 exam01
$1 表示one
$2 表示 two
依次类推
查看当前所执行进程的名称、PID号
[root@localhost ~]#echo $0 $$
bash 5887
[root@localhost ~]#echo $?
127
返回0表示上一条命令正常,返回非0表示上一条命令异常
Shell脚本的概念
Shell脚本
1.用途:完成特定的、较复杂的系统管理任务
2.格式:集中保存多条Linux命令,普通文本文件
3.执行方式:按照预设的顺序依次解释执行
编写可执行的Shell脚本
建立包含执行语句的脚本文件
#脚本文件中包括的内容
运行环境设置:#!/bin/bash
注释信息:以#开始的说明性文字
可执行的Linux命令行
为脚本文件添加可执行权限
给shell脚本增加执行权限
[root@localhost ~]# vi repboot.sh
#!/bin/bash
# To show usage of /boot directory and mode of kernel file.
echo "Useage of /boot: "
du -sh /boot
echo "The mode of kernel file:"
ls -lh /boot/vmlinuz-*
[root@localhost ~]# chmod a+x repboot.sh
运行Shell脚本程序
1.直接执行具有“x”权限的脚本文件
例如:./repboot.sh
2.使用指定的解释器程序执行脚本内容
例如:bash repboot.sh、sh repboot.sh
3.通过source命令(或 . )读取脚本内容执行
例如:souce repboot.sh 或 . hello.sh
Shell脚本应用示例
示例一
[root@localhost ~]# vi /opt/ftpclean.sh
#!/bin/bash
date >> /var/log/pubdir.log
ls -lhR /var/ftp/pub >> /var/log/pubdir.log
rm -rf /var/ftp/pub/*
示例二
[root@localhost ~]# vi /opt/dbbak.sh
#!/bin/bash
DAY=`date +%Y%m%d`
SIZE=`du -sh /var/lib/mysql`
echo "Date: $DAY" >> /tmp/dbinfo.txt
echo "Data Size: $SIZE" >> /tmp/dbinfo.txt
cd /opt/dbbak
tar zcvf mysqlbak-${DAY}.tar.gz /var/lib/mysql /tmp/dbinfo.txt
rm -f /tmp/dbinfo.txt
小结:
1.shell的作用
2.常用的shell类型
3.熟练shell的常用功能
4.shell变量的种类
5.shell脚本的运行条件
练习:
1.对shell常用功能的操作
2.练习shell的各种变量的定义、查看和使用
3.写一个简单的多条命令的shell脚本
4.如何去运行以上的那个shell脚本
5.开机如何自动执行这个shell脚本
练习一参考:
查询命令相关
1 查询data.f文件中字符串”abc”出现的行号以及内容
grep –n ‘abc’ data.f
2 查询data.f文件中字符串”abc”出现的行的内容
grep ‘abc’ data.f
3 查询data.f文件中字符串”abc”出现的行数
grep –n ‘abc’ data.f | cut –f 1 –d ‘:’
4 查询data.f文件中不包含字符串”abc”出现的行号以及内容
grep –vn ‘abc’ data.f
5 使用正则表达式写出与 grep –i “sept” data.f 作用相同的代码
grep ‘[sS][eE][pP][tT]‘ data.f
6 正则表达式 grep ‘48[34]’ data.f 的含义
匹配’483’ or ‘484’
7 正则表达式grep ‘^[^48]’ data.f的含义
匹配不是以4或者8开头的行
8 正则表达式grep ‘K…D’ data.f的含义
.代表任意字符,也就是匹配K ____D
9 正则表达式grep '[0-9][0-5][0-6]' data.f的含义,与grep '^[0-9][0-5][0-6]' data.f的区别?
第一个:匹配3个连续的数字,第一位是0-9,第二位是0-5,第三位是0-6。
第二个:匹配的3个数字必须在行首
10 查询文件中空行的正则表达式
grep '^\s*$' data
11 正则表达式 grep "0:0" /etc/passwd | egrep -v '^root'的真正意图
查找UID和GID都为0的非root用户。
开机自动执行shell脚本
source test.sh 将此命令添加到/etc/rc.local即可