Linux运维之道之ENGINEER1.4(shell脚本基础)

ENGINEER1.4

SHELL脚本基础

认识shell环境

bash shell的使用方式

交互式:

--人工干预,智能化程度高

--逐条解释执行,效率低

非交互式:

--需要提前设计,智能化难度大;

--批量执行,效率高;

--方便在后台及悄悄地执行;

什么是shell脚本:提前设计可执行语句,用来完成特定任务的文件

--解释型程序

--顺序,批量执行

规范shell脚本的一般组成:

#!环境声明

#注释文本

可执行代码

----------------------------------------------------------------------------------------------------------------------------------

例1:

编写helloworld.sh问候脚本

  1. 编写脚本代码:

    #vim  /root/helloworld.sh

    #!/bin/bash

    echo “hello  world”

  2. 添加x执行权限

    #chmod  +x  /root/helloworld.sh

  3. 运行脚本测试

    #/root/helloworld.sh

例2:

编写系统信息报告脚本

  1. 编写脚本代码:

    #vim  /root/1.sh

#!/bin/bash

cat  /etc/redhat-release

uname  -r

hostname

2.添加x执行权限

# chmod  +x   /root/1.sh

3.运行脚本测试:

#/root/1.sh

--------------------------------------------------------------------------------------------------------------------------------------

简单脚本技巧

重定向输出的应用

>:只收集正确    2>:只收集错误      &>:全部收集

本例要求编写一个脚本 /root/out.sh,功能特性如下:

  1. 执行此脚本显示  I  love  study !!
  2. 执行 /root/out.sh  2>  err.log 应该没有显示,但是查看 err.log 文件的内容为  I  love  study !!

步骤:

  1. #vim /root/out.sh

    #!/bin/bash

    #echo  "i  love   study!!"   >&2

  2. #chmod  -x   /root/out.sh
  3. #/root/out.sh
  4. #/root/out.sh  2>err.log
  5. #cat err.log

----------------------------------------------------------------------------------------------------------------------------------------

变量的定义及使用

以不变的名称存放可能变化的值

引用变量值:$变量名    以{}界定易混淆名称

变量的种类:

根据变量的用途不同区分:

环境变量:变量名一般都大写,用来设置用户,系统环境   (PATH)

位置变量:bash内置,存储内置脚本时提供的命令行参数   $n ,n为序号  $1 $2 ...${10}

预定义变量:bash内置,可直接调用的特殊值,不能直接修改

$#:已加载的位置变量的个数   $*:所有位置变量的值  $?:程序退出后的状态值,0表示正常,其他异常

自定义变量:用户自主设计,修改和使用

例:

要求编写一个脚本 /root/myhead,功能特性如下:

此脚本可接收2个位置参数,能够按照下列格式执行

此脚本执行后,能显示“你一共提供了 $# 个参数”,然后在下一行显示“文件 $1 的前 $2 行: ”,紧跟下一行开始输出对应文件的前几行内容

步骤一:编写 /root/myuseradd 添加用户的脚本

#vim  /root/myuseradd

#!/bin/bash

echo  “一共提供了$#个参数”

echo   "用户名是$1,密码是$2   "

useradd $1

echo "$2"   |  passwd  --stdin $1

二.添加执行权限

#chmod  -x  /root/myuseradd.sh

----------------------------------------------------------------------------------------------------------------------------------------------

常用测试选项:

  • 文件状态检测  -f、-d、-e、-r、-w、-x
  • 整数值比较  -gt、-ge、-eq、-ne、-lt、-le
  • 字符串比较  ==、!=
  • 取反操作  !

多分支if选择结构:

if  条件测试操作1   then命令序列1

elif 条件测试操作2   then命令序列2

else  命令序列3

fi

例:

本例要求在虚拟机 server0 上创建 /root/foo.sh 脚本,任务目标如下:

  1. 当运行/root/foo.sh redhat,输出为fedora
  2. 当运行/root/foo.sh fedora,输出为redhat
  3. 当没有任何参数或者参数不是 redhat 或者 fedora时,其错误输出产生以下信息: /root/foo.sh redhat|fedora

1)编写脚本代码

[[email protected] ~]# vim  /root/foo.sh
    #!/bin/bash
    if [ "$1" = "redhat" ]  
    then
           echo "fedora"
    elif [ "$1" = "fedora" ]
    then
           echo "redhat"
    else
           echo "/root/foo.sh redhat|fedora" >&2
    fi

2)添加x执行权限

[[email protected] ~]# chmod  +x  /root/foo.sh

步骤二:测试foo.sh判断脚本

1)测试提供正确参数的情况

[[email protected] ~]# /root/foo.sh  redhat fedora
    [[email protected] ~]# /root/foo.sh  fedora Redhat

2)测试提供非预期参数的情况

[[email protected] ~]# /root/foo.sh  ubuntu
    /root/foo.sh redhat|fedora

3)测试不提供参数的情况

[[email protected] ~]# /root/foo.sh
    /root/foo.sh redhat|fedora

时间: 2025-01-07 10:08:25

Linux运维之道之ENGINEER1.4(shell脚本基础)的相关文章

Linux运维之道之ENGINEER1.2(HTTP服务基础,网页内容访问,安全web)

ENGINEER1.2 HTTP服务基础 基于B/S架构的网页服务 ----服务端提供页面: ----浏览器下载并显示页面: ---------------------------------------------------------------------------------------------------------------------------------------------- 独立wab主机的快速部署 安装httpd #yum  -y  install  http

Linux运维之道之ENGINEER1.3(配置SMB共享,配置NFS共享)

ENGINEER1.3 配置SMB共享 samba服务基础 用途:为客户机提供共享使用的文件夹 协议:SMB(tcp139),CIFS(tcp445) 搭建基本的samba服务 安装samba软件包 #yum -y  install  samba 2.创建samba的共享帐号 #useradd  -s   /sbin/nologin/   harry #useradd  -s   /sbin/nologin/  kenji #useradd  -s   /sbin/nologin/  chihi

Linux运维之道之ENGINEER1.1(配置邮件服务器,数据库管理基础,表数据管理)

ENGINNEER1.1 基础邮件服务 快速部署postfix邮件服务器: --装包,配置,起服务 安装postfix  :默认已安装 配置postfix,修改配置文件 #ls /etc/postfix/main.cf #vim  /etc/postfix/main.cf 16行  myhostname=server0.example.com  #指定主机名 83行  mydomain=example.com     #指定域名 99行  myorigin=server0.example.com

linux运维面试前,先来检查这些基础知识忘了没?

知乎上有这样一个问题:一个新手面试 Linux 运维工作至少需要知道哪些知识?其中有一个答案对这一话题的解读非常深入,今天特别分享给大家. 一.什么是大型网站运维? 首先明确一下,全文所讲的”运维“是指:大型网站运维,与其它运维的区别还是蛮大的:然后我们再对大型网站与小型网站进行范围定义,此定义主要从运维复杂性角度考虑,如网站规范.知名度.服务器 量级.pv量等考虑,其它因素不是重点:因此,我们先定义服务器规模大于1000台,pv每天至少上亿(至少国内排名前10),如sina.baidu. QQ

Linux运维40道精华题

题目 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络.系统.数据库.开发.安全.监控于一身的技术.运维又包括很多种,有DBA运维.网站运维.虚拟化运维.监控运维.游戏运维等等 2)游戏运维又有分工,分为开发运维.应用运维(业务运维)和系统运维 开发运维:是给应用运维开发运维工具和运维平台的 应用运维:是给业务上线.维护和做故障排除的,用开发运维开发出来的工具给业务上线.维护.做故障

Linux运维之道1,2章

pwd -p 返回链接的真实路径 cd /usr/src cd .. cd - cd  家 ls -al ls -ld /root ls -lt cp /etc/hosts /tmp/host cp -r /var/log/ /tmp find -name hello.doc find /root-name "*.log" find -iname "Jacob" find / -empty find / -group tom find / -mtime -3 fin

Linux运维必会MySQL30道基础命令

Linux运维必会MySQL 30道基础命令 老男孩老师教学与培训核心思想:重目标.重思路.重方法.重实践.重习惯.重总结. 版权声明:余连辉 本系列文档为<老男孩 Linux 运维实战培训中心>内部教学用教案,只允许 VIP 学员 个人使用,为保护大家的学习利益,禁止私自传播,违者将取消 VIP 学员资格.严重者我们将法律起诉.如果你已经参加本培训,即视为你已无条件接受上述内容说明! 联系方式: 意见投诉信箱:[email protected] 网站运维交流群:114580181 24605

合格linux运维人员必会的30道shell编程面试题及讲解

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1632876 超深度讲解shell高级编程实战,截至目前shell编程课程国内培训机构最细的课程,不信请看学员表现的水平. 课程牛不牛,不是看老师.课表,而是看培养的的学生水平,目前全免费中伙伴们赶紧看啊. http://edu.51cto.com/course/course_id-5257.html 企业合格的lin

Linux运维MySQL必会面试题100道

老男孩教育Linux运维班MySQL必会面试题100道 (1)基础笔试命令考察 (要求:每两个同学一组,一个口头考,一个上机实战作答,每5个题为一组,完成后换位) 1.开启MySQL服务 2.检测端口是否运行 3.为MySQL设置密码或者修改密码. 4.登陆MySQL数据库. 5.查看当前数据库的字符集 6.查看当前数据库版本 7.查看当前登录的用户. 8.创建GBK字符集的数据库oldboy,并查看已建库完整语句 9.创建用户oldboy,使之可以管理数据库oldboy 10.查看创建的用户o