Shell编程

 
  曾 晔
 
Shell编程
 
DAY01  Shell基础、编写第一个Shell脚本、变量
DAY02  数值运算、条件测试、if选择结构(为脚本提供智能)
DAY03  循环控制(重复操作)、系统服务脚本、中断和退出
DAY04  字符串处理(系统指标提取)、扩展技巧、正则表达式
DAY05  sed文件处理(非交互的vim编辑器)
DAY06  awk文本过滤(类似于grep--行,但是要更强大--列)
DAY07  实战脚本编写
 
 
Linux运维 高薪 编程技能(Shell --》Python --》Java/C)
能更加有效率地执行管理任务(偷懒)
 
 
Shell语言:不支持小数、多线程不方便
Python语言:支持小数运算、网络编程等高级应用,支持多线程
 
     比如:巡检脚本查100台服务器,挨个查;多线程执行可同时查
 
Bash Shell环境的一些特点 ——
常用的快捷键:
Ctrl  w、Esc  . 、Ctrl  a、Ctrl  e
Tab键自动补全(命令名、路径、选项、软件名、系统服务名、……)
 
命令别名:
alias   别名='实际执行的命令行'     ==》/etc/bashrc
 
历史命令的记录数量:
/etc/profile         ==》适用于所有用户
~/.bash_profile        ==》适用于选中的用户
 
     HISTSIZE=1000
 
重定向输入:
命令行   <  文件
 
重定向标准输出:
命令行   >  文件
 
重定向标准错误:
命令行   2>  文件
 
 
分别重定向标准输出、标准错误:
命令行   > 文件A   2>  文件B
 
合并重定向标准输出、标准错误:
命令行   &> 文件C
 
 
创建脚本的过程:
1.建文件
2.添加可执行语句(正常完成XX任务的命令行组合)
3.设置x权限  
 
执行脚本的方式:
方式1:脚本程序的绝对路径,或相对路径(不能省略文件所在位置)
      脚本程序独立运行
方式2:命令解释器    脚本文件
      脚本程序被其他解释器加载再执行
 
任务需求 ——
1. 已知软件仓库位于:
http://classroom/content/rhel7.0/x86_64/dvd/
2. 编写一个脚本,执行此脚本后能为server0快速配置yum源
 
清理旧配置:
rm  -rf  /etc/yum.repos.d/*.repo
添加新配置:
echo '[rhel7]
name=Red hat Enterprise 7.0
baseurl=http://classroom.example.com/content/rhel7.0/x86_64/dvd/
gpgcheck=0' > /etc/yum.repos.d/rhel7.repo
 
 
任务需求 ——  
0. 前提条件:已正确配置好yum
1. 为当前主机快速搭建并启用FTP服务器
2. 当匿名访问此FTP服务器时可以下载 fstab.txt
 
正常部署FTP的命令行操作:
1)装包 vsftpd
yum  -y  install  vsftpd
2)配置(准备下载资源)
cp  /etc/fstab  /var/ftp/fstab.txt
3)开启服务
systemctl  restart  vsftpd
systemctl  enable  vsftpd
 
 
 
# vim  xxxx
.. .. 可执行语句
# chmod  +x  xxxx
 
 
编写一个脚本、编写一个好脚本的难点 ——
任何如何实现(命令行操作)?
命令行的顺序?
如何用更少的命令、更快的命令?(变量、字符传处理、控制结构)
 
 
任务需求:
1)创建一个新变量,名称为 var1,值为 CentOS
# var1=CentOS
2)显示变量var1的内容
# echo  $var1
3)新建一个文件,文件名称来自于变量var1的值,扩展名为.txt
# touch  ${var1}.txt
4)查看环境变量USER、HOME、PATH的值
# echo  $USER   $HOME  $PATH
5)把 first.sh 复制到 /usr/local/bin 目录下,名称为hello
# cp  first.sh  /usr/local/bin
6)直接执行 hello 命令
# hello
 
 
$?:反馈前一条命令的返回状态值(0、非0)
$#:
 
位置变量: 跟在脚本后面提供的参数
    $1  第一个参数、$2 第二个参数、……
    ${10}
 
任务需求:# myuseradd  用户名
1. 编写一个添加用户账号的脚本 /usr/sbin/myuseradd
2. 执行此脚本时可以提供用户名做参数,执行完成后能够自动添加此用户,并且把登录密码设置为 1234567
 
 
#!/bin/bash
useradd  $1
echo  1234567  | passwd  --stdin  $1
 
任务需求:# myuseradd  用户名  密码
1. 编写一个添加用户账号的脚本 /usr/sbin/myuseradd
2. 执行此脚本时可以提供2个参数,其中第一个参数作为用户名,第二个作为密码,添加相应的用户账号
 
#!/bin/bash
useradd  $1
echo  $2  | passwd  --stdin  $1
 
 
任务需求: ./location.sh  a b c d e f g h j k l m n
#!/bin/bash
echo 当前的脚本路径和名称是 $0
echo 第1个参数是  $1
echo 第3个参数是  $3
echo 第10个参数是  ${10}
echo 你一共提供了$#  个参数
echo 你提供的所有参数是:
echo  $*
 
 
进程和进程间的关系
pstree
 
 
 
 
变量的生效范围:默认只在当前命令行环境
    黄药师(玉箫),不给欧阳锋用,不给黄蓉
 
如果黄药师希望黄蓉也能使用这把玉箫
export  玉箫
 
任务需求:控制变量的作用范围
1)在当前环境(黄药师)定义新变量 cjb=玉箫
2)新打开bash进程(黄蓉),查看变量 cjb 的值,然后exit退出
     看不到
3)在原环境(黄药师)使用export输出变量cjb
# export  cjb
4)再次打开bash进程(黄蓉),查看变量 cjb 的值,然后exit退出
     看到
 
问题:欧阳锋无法使用cjb
 
任务需求:
1. 定义一个所有用户都能使用的变量 KLING="天王盖地虎"
2. 每个用户登录时,能看到欢迎信息"Welcome XXXX"
 
实现方法:在所有用户登录login之前定义
# vim  /etc/profile          //环境变量配置文件   
.. ..
export    KLING="天王盖地虎"
echo    "Welcome XXXX"
# su  -  student
.. ..
Welcome  student             //显示欢迎信息  
$ echo  $KLING
天王盖地虎
 
 
使用 su  -  用户名  命令时
 
 
 
read命令,提示用户从键盘输入一个字符串并且保存到指定的变量
比较时编写交互式的脚本
 
任务需求:(脚本改造)
# myuseradd  用户名  密码
== 改造为 ==》
# myuseradd
需要添加的用户名是:  
需要设置的登录密码是:  
 
#!/bin/bash
read  -p "需要添加的用户名是: "   username  
read  -p "需要设置的登录密码是: "   password
useradd  $username
echo $password | passwd  --stdin  $username
 
 
任务需求:
1. 编写一个模拟登录脚本 login.sh
2. 根据提示输入密码时不显示
3. 把用户提供的用户名和密码记录到一个文件/tmp/rec.txt 内
 
#!/bin/bash
read  -p 'login: '  username
stty  -echo
read  -p 'pasword: '  password
stty  echo
echo  "你的登录名是 $username
你的密码是 $password"  >>  /tmp/rec.txt
 
 
命令替换:
# 命令行1  $(命令2)
 
 
获取当前的年月日的操作:
date +%F
 
!!!! 在crotab计划任务记录里,% 表示 注释
 
 
小结:
1)Shell基础概念
2)编写一个脚本的基本过程
3)Shell变量的使用(分类、定义/赋值/引用、read、export)
 
 
任务需求:
1. 使用tar备份 /home 目录,保存到 /opt/当前日期.tar.gz
2. 这个备份操作每3天执行一次
 
# vim  /root/homebak.sh
tar  -zcPf  /opt/$(date +%F).tar.gz   /home
# chmod +x /root/homebak.sh
 
# crontab  -e
0  0  */3  *  *  /root/homebak.sh
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值