您的位置:首页 > 运维架构 > Shell

运维之shell篇------1. Shell概述 、 编写及执行脚本 、 Shell变量

2017-10-24 10:09 676 查看
ONE DAY

 

常用的脚本语言

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 ~]#r[/b]pm -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 ${SCHOOL}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 ${a}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 ~]# ex
bfbc
it                              //返回原有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已不可

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell
相关文章推荐