shell脚本

Shell、Python 和 Perl

除了 Shell,能够用于 Linux 运维的脚本语言还有 Python 和 Perl。

1. Perl 语言
Perl 比 Shell 强大很多,在 2010 年以前很流行,它的语法灵活、复杂,在实现不同的功能时可以用多种不同的方式,缺点是不易读,团队协作困难。
Perl 脚本已经成为历史了,现在的 Linux 运维人员几乎不需要了解 Perl 了,最多可以了解一下 Perl 的安装环境。

2. Python 语言
Python 是近几年非常流行的语言,它不但可以用于脚本程序开发,也可以实现 Web 程序开发(知乎、豆瓣、YouTube、Instagram 都是用 Python 开发),甚至还可以实现软件的开发(大名鼎鼎的 OpenStack、SaltStack 都是 Python 语言开发)、游戏开发、大数据开发、移动端开发。
现在越来越多的公司要求运维人员会 Python 自动化开发,Python 也成了运维人员必备的技能,每一个运维人员在熟悉了 Shell 之后,都应该再学习 Python 语言。

3. Shell
Shell 脚本的优势在于处理偏操作系统底层的业务,例如,Linux 内部的很多应用(有的是应用的一部分)都是使用 Shell 脚本开发的,因为有 1000 多个 Linux 系统命令为它作支撑,特别是 Linux 正则表达式以及三剑客 grep、awk、sed 等命令。
对于一些常见的系统脚本,使用 Shell 开发会更简单、更快速,例如,让软件一键自动化安装、优化,监控报警脚本,软件启动脚本,日志分析脚本等,虽然 Python 也能做到这些,但是考虑到掌握难度、开发效率、开发习惯等因素,它们可能就不如 Shell 脚本流行以及有优势了。对于一些常见的业务应用,使用 Shell 更符合 Linux 运维简单、易用、高效的三大原则。
Python 语言的优势在于开发复杂的运维软件、Web 页面的管理工具和 Web 业务的开发(例如 CMDB 自动化运维平台、跳板机、批量管理软件 SaltStack、云计算 OpenStack 软件)等。

Shell是什么?

Shell是命令解释器(command interpreter),是Unix操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作系统内核(kernel)能够识别的指令,
并且操作系统内核执行完将返回的输出通过shell再呈现给用户,下图所示用户、shell和操作系统的关系:Shell也是一门编程语言,即shell脚本,shell是解释执行的脚本语言,可直接调用linux命令。 .java -> .class
一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的。

Shell种类?

操作系统内核(kernel)与shell是独立的套件,而且都可被替换。不同的操作系统使用不同的shell;同一个kernel之上可以使用不同的shell。
  常见的shell分为两大主流:
  sh:
    Bourne shell(sh) ,Solaris,hpux默认shell
    Bourne again shell(bash) ,Linux系统默认shell
  csh:
    C shell(csh)
    tc shell(tcsh)

查看使用Shell
在这里插入图片描述
hell脚本编程
创建Shell脚本
首行:
第一行内容在脚本的首行左侧,表示脚本将要调用的shell解释器,内容如下:
     #!/bin/bash
     #!符号能够被内核识别成是一个脚本的开始,这一行必须位于脚本的首 行,/bin/bash是
     bash程序的绝对路径,在这里表示后续的内容将通过bash程序解释执行。
注释
    注释符号# 放在需注释内容的前面
     在这里插入图片描述
内容
    可执行内容和shell结构
    在这里插入图片描述
Shell脚本的权限
  一般情况下,默认创建的脚本是没有执行权限的。
   在这里插入图片描述
 没有权限不能执行,需要赋予可执行权限。
  在这里插入图片描述
Shell脚本的执行
1,输入脚本的绝对路径或相对路径
    /root/helloWorld.sh
    ./helloWorld.sh
2,bash或sh +脚本
    bash /root/helloWorld.sh
    sh helloWorld.sh
    注:当脚本没有x权限时,root和文件所有者通过该方式可以正常执行。

3,在脚本的路径前再加". " 或source
    source /root/helloWorld.sh
    . ./helloWorld.sh
    
  区别:第一种和第二种会新开一个bash,不同bash中的变量无法共享。但是使用. ./脚本.sh 这 种方式是在同一个shell里面执行的。
在这里插入图片描述
Shell变量
  变量:是shell传递数据的一种方式,用来代表每个取值的符号名。当shell脚本需要保存一些信 息时,如一个文件名或是一个数字,就把它存放在一个变量中。
变量设置规则:
1,变量名称可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写, 便于区分。
2,在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为 数值型。
3,变量用等号连接值,等号左右两侧不能有空格。
4,变量的值如果有空格,需要使用单引号或者双引号包括
变量分类
  Linux Shell中的变量分为用户自定义变量,环境变量,位置参数变量和预定义变量。可以通过set 命令查看系统中存在的所有变量。
  系统变量:保存和系统操作环境相关的数据。HOME、HOME、PWD、SHELL、SHELL、 USER等等
位置参数变量:主要用来向脚本中传递参数或数据,变量名不能自定义,变量作用固定。
  预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
用户自定义变量
  用户自定义的变量由字母或下划线开头,由字母,数字或下划线序列组成,并且大小写字母意 义不同,变量名长度没有限制。
设置变量
  习惯上用大写字母来命名变量。变量名以字母表示的字符开头,不能用数字。
变量调用
  在使用变量时,要在变量名前加上前缀“$”.
  使用echo 命令查看变量值。eg:echo A 变 量 赋 值     1 , 定 义 时 赋 值 :         变 量 = 值             等 号 两 侧 不 能 有 空 格         e g :             S T R = " h e l l o w o r l d "             A = 9     2 , 将 一 个 命 令 的 执 行 结 果 赋 给 变 量         A = ‘ l s − l a ‘ 反 引 号 , 运 行 里 面 的 命 令 , 并 把 结 果 返 回 给 变 量 A         A = A 变量赋值   1,定义时赋值:     变量=值      等号两侧不能有空格     eg:       STR="hello world"       A=9   2, 将一个命令的执行结果赋给变量     A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A     A= A  1              eg:      STR="helloworld"      A=9  2    A=lslaA    A=(ls -la) 等价于反引号
      eg: aa= ( ( 4 + 5 ) )                 b b = ‘ e x p r 4 + 5 ‘     3 , 将 一 个 变 量 赋 给 另 一 个 变 量         e g : A = ((4+5))         bb=`expr 4 + 5 `   3,将一个变量赋给另一个变量     eg : A= ((4+5))        bb=expr4+5  3    eg:A=STR
变量叠加
  eg:#aa=123
  eg:#cc="KaTeX parse error: Expected 'EOF', got '#' at position 13: aa"456   eg:#̲dd={aa}789

单引号和双引号的区别:
  现象:单引号里的内容会全部输出,而双引号里的内容会有变化
  原因:单引号会将所有特殊字符脱意
  NUM=10
  SUM="NUMhehe"echoNUMhehe"echoSUM 输出10 hehe
  SUM2='NUMhehe′echoNUMhehe′echoSUM2 输出$NUM hehe
列出所有的变量
  set
删除变量
  unset NAME
    eg :
      # unset A 撤销变量 A
      # readonly B=2 声明静态的变量 B=2 ,不能 unset
      在这里插入图片描述
      用户自定义的变量,作用域为当前的shell环境。
环境变量
  用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和其所有子shell中生效。如 果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。

export 变量名=变量值 申明变量
  作用域:当前shell以及所有的子shell。
$* 和 @ 的 区 别     1 , ∗ 和 ∗ 和 @ 都 表 示 传 递 给 函 数 或 脚 本 的 所 有 参 数 , 不 被 双 引 号 " " 包 含 时 , 都 以 " 1 " " 1 " " 2 " … " @的区别   1,∗和∗和@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以"1""1""2" … " @  1@"""1""1""2""n" 的形式输出所有参数;
  2,当它们被双引号" "包含时,“∗"会将所有的参数作为一个整体,以"∗"会将所有的参数作为一 个整体,以"1 2…2…n"的形式输出所有参数;
  3,”@“会将各个参数分开,以”@“会将各个参数分开,以"1” “2”…“2”…“n” 的形式输出所有参 数。
  
read命令
  read [选项] 值
  read -p(提示语句) -n(字符个数) -t(等待时间,单位为秒) –s(隐藏输入)
    eg:
      read –t 30 –p “please input your name: ” NAME
      echo $NAME
      read –s –p “please input your age : ” AGE
      echo $AGE
      read –n 1 –p “please input your sex [M/F]: ” GENDER
      echo $GENDER
read命令
  read [选项] 值
  read -p(提示语句) -n(字符个数) -t(等待时间,单位为秒) –s(隐藏输入)
    eg:
      read –t 30 –p “please input your name: ” NAME
      echo $NAME
      read –s –p “please input your age : ” AGE
      echo $AGE
      read –n 1 –p “please input your sex [M/F]: ” GENDER
      echo $GENDER

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值