码迷,mamicode.com
首页 > 系统相关 > 详细

Linux之Shell编程

时间:2021-06-18 19:00:06      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:shel   存在   大括号   前缀   mys   little   start   没有   函数   

3.Shell编程

 

1.shell是什么

shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止一些程序。

 

2. shell脚本的执行方式

  • 脚本格式要求

    • 1.脚本以#!/bin/bash开头

    • 2.脚本需要可执行权限

  • 编写一个shell脚本,输出hello shell

    • mkdir /root/shcode

    • cd /root/shcode

    • vim hello.sh

    • 输入

      • #!/bin/bash
      • echo "hello shell "
  • 脚本的常用执行方式

    • 方式1:(输入脚本的绝对路径或相对路径)

      • 说明:首先要赋予helloshell.sh脚本的 +x 权限,

      • 再执行脚本chmod u+x hello.sh

      • ./hello.sh或者 /root/shcode/hello.sh

    • 方式2:(sh+脚本)

      说明:不用赋予脚本+x权限,直接执行即可。
      sh hello.sh

 

3.shell的变量

  • shell变量介绍
    1.Linux shell 中的变量分为,系统变量和用户自定义变量。

    2.系统变量: $HOME $PWD $SHELL $USER

    3.显示当前shell中所有变量:set

  • shell变量的定义

    • 基本语法
      1.定义变量: 变量名=值

      2.撤销变量: unset 变量

      3.声明静态变量:readonly 变量 ,但是不能unset

  • 案例

    • 案例1:声明变量A

      • vim var.sh
      • #!/bin/bash
      • A=100
      • echo "A=$A"
    • 案例2:撤销变量A

      unset A

    • 案例3:声明静态的变量B,不能unset

      readonly B

 

  • shell变量的定义

    • 定义变量的规则
      1.变量名称可以由字母、数字、和下划线组成,但是不能以数字开头。 5A=100 (x)

      2.等号两侧不能有空格

      3.变量名称一般习惯为大写,这是一个规范

    • 将命令的返回值赋给变量
      1.A=date反引号, 运行命令,并把结果返回给变量A

      2.A=$(date) 等价于反引号

 

4.设置环境变量

  • 基本语法

    1. export 变量名=变量值 功能描述:将shell变量输出为环境变量/全局变量

    2. source 配置文件 功能描述:让修改后的配置信息立即生效

    3. echo $变量名 功能描述:查询环境变量的值

  • 案例

    1. 在/etc/profile文件中定义TOMCAT_HOME环境变量
      ....
    2. 查看环境变量TOMCAT_HOME的值
      ....
    3. 在另一个shell程序中使用 TOME_HOME
      ....
  • 注意:
    在输出TOMCAT_HOME环境变量前,需要让其生效
    source /etc/profile

  • shell脚本的注释

    • shell脚本单行注释 采用 #开头

    • shell脚本多行注释 :<<! 多行注释内容 !

 

5.位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
比如: ./myshell.sh 100 200 这就是一个执行shell的命令行,就可以在myshell脚本中获取到参数信息

  • 基本语法
    1.$n 功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要使用大括号包含,如${10}

    2.$* 功能描述:这个变量代表命令行中的所有参数 ,此命令把所有参数看成一个整体

    3.$@ 功能描述:这个变量也代表命令行中的所有的参数,但是此命令把每个参数区分对待

    4.$# 功能描述:这个变量代表命令行中的所有参数的个数

  • 位置参数变量

    • 案例:编写一个shell脚本position.sh,在脚本中获取到命令行的各个参数信息
      • #!/bin/bash

      • echo "0=$0 1=$1 2=$2"

      • echo "所有的参数=$*"

      • echo "$@"

      • echo "参数的个数=$#"

      • 执行 sh position.sh 100 200

      • 输出结果

        • 0=./position.sh 1=100 2=200
        • 所有的参数=100 200
        • 100 200
        • 参数的个数=2

 

6.预定义变量

就是shell脚本设计者事先已经定义好的变量,可以直接在shell脚本中使用

  • 基本语法

    1. $$ 功能描述:当前进程的进程号(PID)

    2. $! 功能描述:后天运行的最后一个进程的进程号(PID)

    3. $? 功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0(具体的数字由命令本身来决定),则证明上一条命令执行不正确。

  • 应用案例

    在一个shell脚本中简单使用预定义变量
    prevar.sh

 

7.运算符

  • 基本语法

    1. "$((运算式))""$[运算式]" 推荐使用 或者 expr m + n

    2. 注意expr运算符间要有空格

    3. expr m-n

    4. expr \*, / , % 乘,除,取余

  • 应用实例

    • 案例1:计算(2+3)*4
      1.$(((2+3)*4))

      2.$[(2+3)*4]

      3.TEMP=expr (2 + 3)`

      4.RES=expr TEMP * 4``

    • 案例2:求出命令行的两个参数[整数]的和

      • vim oper.sh

      • #!/bin/bash

      • SUM=$[$1+$2]

      • echo "sum=$SUM"

      • ./oper.sh 20 50

 

8.条件判断

  • 判断语句

    • 基本语法
      [ condition ] 注意condition前后要有空格

      非空返回true,可使用$?验证(0为true,>1为false)

  • 应用实例

    [] true

    [] false

    [ condition ] && echo OK || echo notok 条件满足,执行后边语句

  • 常用判断条件

    1. = 字符串比较

    2. 两个整数的比较

      -lt 小于

      -le 小于等于 little equal

      -eq 等于

      -gt 大于

      -ge 大于等于

      -ne 不等于

    3. 按照文件权限进行判断

      -r 有读的权限

      -w 有写的权限

      -x 有执行的权限

    4. 按照文件类型进行判断

      -f 文件存在并且是一个常规的文件

      -e 文件存在

      -d 文件存在且是一个目录

  • 使用案例

    • 案例1: 判断"ok" 是否等"ok"

      判断语句 =

    • 案例2: 23是否大于等于22

      判断语句 -ge

    • 案例3: /root/shcode/aaa.txt目录中的文件是否存在

      判断语句 -f

9.流程控制

  • if判断

    • 基本语法
      • if [条件判断式] then 代码 fi

      • if [条件判断表达式] then 代码 elseif [条件判断表达式] 代码 fi

      • [ 条件判断式 ] ,中括号和条件判断式之间必须有空格

  • 应用实例 ifcase.sh
    编写shell程序,如果输入的参数大于等于60,输出及格了,如果输入小于60,输出不及格。

    #!/bin/bash
    if [ $1 -ge 60 ]
    then
    echo "及格"
    elif [ $1 -lt 60 ]
    then
    echo "不及格"
    fi

  • case语句

    • 基本语法
      • case $变量名 in "1")

        如果变量的值等于值1,则执行程序1

      • ;; "2")

        如果变量的值等于值2,则执行程序2

      • ;; "* ")

        如果变量的值都不是以上的值,则执行此程序

      • ;; esac

  • 应用案例

    当命令行参数是1时,输出周一,当是2时,输出周二,其他情况输出other

    #!/bin/bash
    case $1 in
    "1")
    echo "周一"
    ;;
    "2")
    echo "周二"
    ;;
    *)
    echo "other"
    ;;
    esac

  • for 循环

    • 基本语法1
      for 变量 in 值1 值2 值3 ... do 程序/代码 done

    • 基本语法2

    for ((初始值;循环控制条件;变量变化)) do 程序 done

  • while循环

    • 基本语法1

      while [ 条件判断式 ] do 程序 done

 

10.read读取控制台输入

  • 基本语法
    read(选项)(参数)

    1. 选项
      -p 功能:指定读取值时的提示符;

      -t 功能:指定读取值时等待的时间(秒),如果没有在指定的时间输入,就不再等待了。

    2. 参数
      变量: 指定读取值的变量名

  • 应用实例 testRead.sh

    案例1:读取控制台输入一个num值

    案例2:读取控制台输入一个num值,在10秒内输入

    #!/bin/bash
    read -p "请输入一个数NUM1=" NUM1
    echo "你输入的数NUM1=$NUM1"
    read -t 10 -p "请输入一个数NUM2=" NUM2
    echo "你输入的数NUM2=$NUM2"

 

11. 函数

shell编程和其他编程语言一样,有系统函数,也可以自定义函数。

  • 系统函数

    1. basename基本语法 功能:返回完整路径最后/的部分,常用于获取文件名

      basename pathname suffix

      basename string suffix 功能描述:basename命令会删掉所有的前缀包括最后一个‘/‘字符,然后将字符串显示出来。

      选项:suffix为后缀,如果指定了suffix,basename会将pathname或string中的suffix去掉

  • 应用实例
    请返回/home/aaa/test.txt的test.txt的部分

    指令:

    • basename /home/aaa/test.txt
      执行结果: test.txt
    • basename /home/aaa/test.txt .txt

    执行结果: test

  1. dirname基本语法
    功能:返回完整路径最后/的前面的部分,常用于返回路径部分

    dirname 文件绝对路径 功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

    应用案例
    案例1:请返回/home/aaa/test.txt的/home/aaa

    指令: dirname /home/aaa/test.txt

  2. 自定义函数

    1. 基本语法
      [function] funname[()] { action; [return int;] }

    2. 调用直接写函数名 funname [值]

    3. 应用实例
      1. 计算输入两个参数的和,getSum

      #!/bin/bash
      #计算输入两个参数的和,getSum

      # 定义函数getSum
      function getSum()
      {
      SUM=$[ $n1+$n2 ]
      echo "和是=$SUM"
      }

      #输入两个值
      read -p "请输入一个值n1=" n1

      read -p "请输入一个值n2=" n2

 

Linux之Shell编程

标签:shel   存在   大括号   前缀   mys   little   start   没有   函数   

原文地址:https://www.cnblogs.com/lsh-admin/p/14896918.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!