常用的脚本语言
perl ruby lua shell python
面向过程perl ruby lua shell
面向对象python
1.关于shell
[root@svr5 ~]# yum -y install ksh //若缺少ksh请先安装ksh包
[root@svr5 ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh //确认当前系统已识别ksh
[root@svr5 ~]# ksh //进入ksh环境
改变解释器两种:useradd -s /bin/ksh zhangsan
Usermod -s /bin/ksh zhangsan 永久改变
改了/etc/passwd
2.关于history
[root@svr5 ~]# grep HISTSIZE /etc/profile
[root@svr5 ~]# history | wc -l
[root@svr5 ~]# !1028
[root@svr5 ~]# !Cat
!grep
History -c # 清楚当前历史
> .bash_history #清楚永久历史
3.关于alias
[root@svr5 ~]# grep '^alias' ~/.bashrc
[root@svr5 ~]# alias lh='ls -lh' //定义别名命令lh
[root@svr5 ~]# unalias lh //取消名为lh的命令别名
[root@svr5 ~]# unalias -a //取消所有别名
[root@svr5 ~]#vim /root/bashrc //定义永久别名
[root@svr5 ~]#vim /etc/.bashrc //定义全局别名
[root@svr5 ~]#vim /home/用户名/bashrc //定义某用户别名
4.关于重定向
> >>
2> 2>>
&> &>>
标准输入(stdin),描述号为0;标准输出(stdout),描述号为1;标准错误(stderr),描述号为2。
[root@svr5 ~]# mail –s Error root < /etc/passwd
[root@svr5 ~]#echo asfs > a.txt #正确输出定向
[root@svr5 ~]#Ls ssg /etc/fstab 2>a.txt #错误输出重定向
[root@svr5 ~]#Ls ssg /etc/fstab &>a.txt #错误与正确一起输出重定向
拓展思考根据实际需求,发散。
实战:
1.每分钟判断,查看当前用户登陆是否超过3人,超过三个,通过邮箱发送root,报警.
#计算登陆用户
[root@svr5 ~]#Vim test1.sh
第一种:
#!/bin/bash
Num=$(who | wc -l)
If [ $num -gt 3 ];then
Mail -s Error(变化1) root(变化1) < /etc/passwd(变化1)
Fi
第二种:
Vim /laowang.txt
隔壁老王对村里寡妇下手,请快去拯救她。
#!/bin/bash
Num=$(who | wc -l)
If [ $num -gt 3 ];then
Mail -s Warning(变化2) 13475639563@163.com(变化2) < /laowang.txt(变化2)
Fi
2.每周五对/var/log文件进行归档一次。
[root@svr5 ~]#crontab -e
第1列分钟1~59
第2列小时1~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~6(0表示星期天)
第6列要运行的命令
5 3 * * 5 tar -czf log-`date +%Y%m%d`.tar.gz /var/log (复习tar)
5.关于管道
|[root@svr5 ~]# ls -l /etc | wc -l #统计/etc/目录下资料的数量
[root@svr5 ~]# yum list | grep cluster #列出Yum库里名称中含cluster的软件包
[root@svr5 ~]#rpm -qa | grep nfs
[root@svr5 ~]#yum groups list hidden| grep -i virt
[root@svr5 ~]#netstat -anpt | grep httpd
[root@svr5 ~]#Ifconfig eth0 | grep ‘ether’ | wc -l
[root@svr5 ~]# yum list | grep cluster
6.解释器--不同进程---执行脚本
绝对路径脚本直接打路径脚本;当前目录下脚本打./
可以不加.sh ,只是代码不带颜色
[root@svr5 ~]# bash first.sh //开启子进程
[root@svr5 ~]# sh first.sh //开启子进程
[root@svr5 ~]# source first.sh //不开启子进程
[root@svr5 ~]#./first.sh
7.脚本实战
1.在屏幕上输出一段文字“Hello World”
[root@svr5 ~]# vim /root/first.sh
#!/bin/bash
echo 'Hello World'
[root@svr5 ~]# chmod +x /root/first.sh //添加可执行权限
[root@svr5 ~]# /root/first.sh
Hello World
2.能够为本机快速配好Yum仓库
[root@svr5 ~]# vim /root/el6repo.sh
#!/bin/bash
Echo ‘准备配置yum源’
rm -rf /etc/yum.repos.d/*.repo
echo '[rhel-packages]
name=Red Hat Enterprise Linux 6
baseurl=file:///misc/cd
Enabled=1
gpgcheck=0
或者
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
' > /etc/yum.repos.d/rhel6.repo
Echo ‘yum源配置成功’
Echo ‘软件数量如下:’
Yum repolist | tail -1
[root@svr5 ~]# chmod +x /root/el6repo.sh //添加可执行权限
[root@svr5 ~]# ./el6repo.sh
3.能够为本机快速装配好vsftpd服务
[root@svr5 ~]# vim /root/ftpon.sh
#!/bin/bash
yum -y install vsftpd &> /dev/null(只有管理员才有权限做)
systemctl start vsftpd
systemctl enable vsftpd
[root@svr5 ~]# chmod +x /root/ftpon.sh //添加可执行权限
[root@svr5 ~]# /root/ftpon.sh
8.定义/赋值/查看变量
[root@svr5 ~]# SCHOOL="Tarena IT"
[root@svr5 ~]# set | grep SCHOOL
[root@svr5 ~]# echo $SCHOOLGroup //无法识别变量名SCHOOL
[root@svr5 ~]# echo Group //区分后可以识别
[root@svr5 ~]# unset SCHOOL //撤销变量SCHOOL
[root@svr5 ~]# echo $SCHOOL //查看时已无结果
9.环境变量
全局文件为/etc/profile,对所有用户有效;用户文件为~/.bash_profile,仅对指定的用户有效。
[root@svr5 ~]# cat /etc/profile #查看/etc/profile文件内容
[root@svr5 src]# set #查看所有的变量
[root@svr5 src]# env #查看所有的环境变量
当前用户的环境变量USER记录了用户名、LOGNAME记录了登录名、HOME记录了宿主目录、SHELL记录了登录Shell、HOSTNAME记录主机名、TERM记录终端类型:
[root@svr5 ~]# echo $USER $LOGNAME $HOME $SHELL
root root /root /bin/bash
[root@svr5 ~]# echo $HOSTNAME
svr5.tarena.com
环境变量PS1表示Shell环境的一级提示符,即命令行提示符(\u 用户名、\h 主机名、\W 工作目录、\$ 权限标识):
[root@svr5 src]# echo $PS1 //查看默认的一级提示
[\u@\h \W]\$
[root@svr5 src]#PS1='bash-3.2\$' //修改一级提示
bash-3.2# //更改结果
bash-3.2#PS1='[\u@\h \W]\$ ' //恢复原有设置
[root@svr5 src]#
环境变量PS2表示二级提示符,出现在强制换行、at任务编辑等场合:
[root@svr5 ~]# echo $PS2 //查看默认的二级提示
>
[root@svr5 src]# cd \ //强制换行,观察提示符效果
> /root/
[root@svr5 ~]# PS2='=> ' //手动修改二级提示
[root@svr5 ~]# cd \ //再次验证提示符效果
=> ~
[root@svr5 ~]# PS2='> ' //恢复原有设置
10.查看系统变量
使用env可查看所有环境变量
[root@svr5 src]# env
使用set可查看所有变量(包括env能看到的环境变量)
[root@svr5 src]# set
11.使用位置变量与预定义变量
[root@svr5 ~]# vim location.sh
#!/bin/bash
echo $0 //脚本的名称
echo $1 //第一个参数
echo $2 //第二个参数
echo $* //所有参数
echo $# //所有的综合
echo $$ //当前进程的进程号
echo $? //上一个程序的返回状态码
[root@svr5 ~]# chmod +x location.sh //添加可执行权限
[root@svr5 ~]# ./location.sh one 1 2 abc qq 8 7
#a=1定义变量
Echo b 调用变量
Unset a 取消变量
12.三种引号对变量赋值的影响
单引号:界定一个完整的字符串,并且可以实现屏蔽特殊符号的功能。
双引号:使用双引号可以界定一个完整字符串。
反引号或$():使用反撇号或$()时,可以将命令执行的标准输出作为字符串存储,因此称为命令替换。
1. [root@svr5 ~]# SCHOOL=Tarena IT Group
2. -bash: IT: command not found //未界定时赋值失败
3. [root@svr5 ~]# SCHOOL="Tarena IT Group" //界定后成功
4. [root@svr5 ~]# touch aa bb //创建了两个文件
5. [root@svr5 ~]# touch "aa bb" //创建了一个文件
6. [root@svr5 ~]# ll //查看结果
7. [root@svr5 ~]# NOTE='当前的用户是:$USER'
8. [root@svr5 ~]# echo $NOTE
9. 当前的用户是:$USER //单引号内的 $ 被视为普通字符
10. [root@svr5 ~]# tar -czf log-`date +%Y%m%d`.tar.gz /var/log
13.read基本用法
[root@svr5 ~]# read str
What's happen ? //随便输入一些文字,按Enter键提交
[root@svr5 ~]# echo $str //查看赋值结果
What's happen ?
[root@svr5 ~]# read -p "请输入一个整数:" i
请输入一个整数:240
[root@svr5 ~]# echo $i
240
将回显功能关闭(stty -echo)
将回显功能恢复(stty echo)
14.使用export发布全局变量
[root@svr5 ~]# echo $SCHOOL
Tarena IT Group
[root@svr5 ~]# sh //开启一个sh子进程
sh-3.2# echo $SCHOOL //查看SCHOOL变量值无结果
[root@svr5 ~]# bash //开启bash子进程
[root@svr5 ~]# echo $SCHOOL //查看SCHOOL变量值无结果
[root@svr5 ~]# exit //返回原有Shell环境
· [root@svr5 ~]# export SCHOOL //发布已定义的变量
· [root@svr5 ~]# export XX="1234" //发布新变量
· [root@svr5 ~]# export NSD YY="5678" //混合式发布
· [root@svr5 ~]# sh //进入sh子Shell环境
· sh-3.2# echo $SCHOOL //查看全局变量的值
若要取消全局变量的全局属性,可结合export命令的 -n 选项;若要取消变量,则应使用unset命令
· [root@svr5 ~]# export -n SCHOOL XX //取消全局变量属性
· [root@svr5 ~]# echo $SCHOOL $XX //局部变量SCHOOL、XX仍可用
sh-3.2# echo $SCHOOL $XX //全局变量SCHOOL、XX已不可