• 【shell基本语法 01】


    一、概述:

     操作系统中基础的是硬件(cpu,内存),外面一层是Linux的内核,在外面一层是应用程序,那么shell在中间扮演的角色就是关联内核和应用程序

    shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核。

    二、Shell解释器

    1、Linux提供的解释器

    [root@localhost ~]# cat /etc/shells 
    /bin/sh
    /bin/bash
    /sbin/nologin
    /usr/bin/sh
    /usr/bin/bash
    /usr/sbin/nologin

    有6个常用的一般是前面两个,Shell脚本的特点一般都是已.sh结尾的

    2、bash和sh的关系

    [root@localhost bin]# ll |grep bash
    -rwxr-xr-x. 1 root root      960472 8月   3 2017 bash
    lrwxrwxrwx. 1 root root           4 1月  25 13:50 sh -> bash

    从sh -> bash可以看出来,两者是软连接,sh最终调用的其实也是bash

    3、centos默认的解释器是bash

    [root@localhost bin]# echo $SHELL
    /bin/bash

    三、shell脚本的格式

    1、具体格式:

    脚本以#!/bin/bash开头(指定解析器:bash,当然也可以指定sh  #!/bin/sh

    实例1:输出hellword

    1)一般情况下我们可以在终端输入:echo hellword -->执行结果:helloword

    Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出

    2)用shell的sh、bash或者./执行

    [root@localhost data]# touch helloword.sh
    [root@localhost data]# vi helloword.sh 
    文件内容:
    #!/bin/bash
    echo "hello girl"
    
    #第一种相对路径下用sh 、bash执行
    [root@localhost data]# sh helloword.sh   
    hello girl
    [root@localhost data]# bash helloword.sh 
    hello girl
    
    #绝对路径下用sh 、bash执行
    [root@localhost data]# bash /opt/data/helloword.sh 
    hello girl
    [root@localhost data]# sh /opt/data/helloword.sh 
    hello girl
    
    #第二种采用输入脚本的相对路径/绝对路径执行 -->结果权限不够
    [root@localhost data]# ./helloword.sh
    -bash: ./helloword.sh: 权限不够
    [root@localhost data]# /opt/data/helloword.sh
    -bash: /opt/data/helloword.sh: 权限不够
    
    #赋予执行权限
    [root@localhost data]# chmod +x helloword.sh 
    [root@localhost data]# ./helloword.sh 
    hello girl
    [root@localhost data]# /opt/data/helloword.sh 
    hello girl

    第一种和第二种的区别在于:第一种的本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限;第二种本质是脚本需要自己执行,需要执行权限

    实例2:多命令行处理

    需求:通过shell脚本实现:在/opt/data目录下创建一个test.txt文件,并在文件中写入I love zly

    1)实际操作

    创建一个batch.sh文件并写入shell脚本
    [root@localhost data]# touch batch.sh
    [root@localhost data]# vi batch.sh
     #!/bin/bash
    
    cd /opt/data
    touch test.txt
    echo "I love zly" >> test.txt
    
    #执行batch.sh文件并查看是否生成test.txt并且文本内容是否是“I love zly”
    [root@localhost data]# bash batch.sh 
    [root@localhost data]# ll
    总用量 12
    -rw-r--r--. 1 root root 71 1月  28 16:26 batch.sh
    -rwxr-xr-x. 1 root root 31 1月  28 16:04 helloword.sh
    -rw-r--r--. 1 root root 11 1月  28 16:26 test.txt
    [root@localhost data]# cat test.txt 
    I love zly

    注意:echo "I love zly" >> test.txt   中的>>是重定向的意思,实际的作用是把“I love zly”添加到test.txt文件中

    实例2:加入到环境变量后执行

    以wufq用户为例,比如执行/home/wufq/data下的所有.sh文件

    1、先查看wufq用户的HOME路径

     

     2、修改当前用户的环境变量

    在当前用户的根目录下,执行

    vi .bash_profile

    把data路径添加到path内

    3、保存后,source  .bash_profile

    4、增加data目录下所有.sh文件可执行的权限,然后就可以直接用文件名执行了

     三、shell中的变量

    1、常用的系统变量

    $HOME$PWD$SHELL$USER

    显示当前Shell中所有变量:set

    [root@localhost data]# set
    BASH=/bin/bash
    BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
    BASH_ALIASES=()
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_CMDS=()
    BASH_LINENO=()
    BASH_SOURCE=()

    2、自定义变量

    1)基本语法:

    --->  定义变量:变量=值  (规范:变量和值之间不能有空格)

    [root@localhost data]# A =1
    -bash: A: 未找到命令
    [root@localhost data]# A = 1
    -bash: A: 未找到命令
    [root@localhost data]# A=1
    [root@localhost data]# echo $A
    1 

    ---> 撤销变量:unset 变量

    [root@localhost data]# unset A
    [root@localhost data]# echo $A
    
    [root@localhost data]# 

     ---> 声明静态变量readonly变量,注意:不能unset

    [root@localhost data]# readonly C=5
    [root@localhost data]# echo $C
    5
    [root@localhost data]# unset
    [root@localhost data]# echo $C
    5
    [root@localhost data]# 

     执行unset无效

    2)变量定义规则

    --> 变量名可以由字母,数字和下划线组成,但是数字不能开头,环境变量名建议大写

    --> 等号两侧不能为空格

    --> 在bash中,变量的默认类型都是字符串类型,不能进行数值的运算

    --> 变量的值如果有空格,需要用双引号或单引号引起来

    [root@localhost data]# TEST_1="test ing"+1
    [root@localhost data]# echo $TEST_1
    test ing+1

     --> 可把变量设置成全局变量,其他的Shell程序可以使用  ==>通过export 变量名来设置

    [root@localhost data]# vi helloword.sh 
    #!/bin/bash
    
    echo "hello girl"
    echo $TEST_1   --->增加这行内容
    [root@localhost data]# export TEST_1    -->把TEST_1变量设置成全局变量
    [root@localhost data]# sh helloword.sh 
    hello girl
    test ing+1    -->显示出来了说明:全局变量已经设置成功

     3、特殊变量:

    1)$n:n为数字,$0代表脚本名称,$1~$9代表的第一到第九个参数,十以上的参数需要用大括号包含:如:${10}

    举例:

     2)$#:获取所有输入参数个数,常用于循环

     3)$*:代表命令行中所有的参数,把所有的参数看做一个整体

      $@:也是代表命令行中所有的参数,不过$@是把每个参数区别对待

     

     4)$?:最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令的正常执行,如果这个变量的值为非0(具体是哪一个值,由命令本身确定),则证明上一个命令没有正常执行

    四、运算符

    1、基本语法:$((运算式))   或  $[运算式]

    2、expr +   -   *   /  %    ==> 加 减 乘 除  取余    注意:expr 运算符间要有空格

    举例1:

     举例2:

    expr一步完成运算方式

     

     采用$[运算符的方式] 计算

    [root@localhost data]# Y=$[ (2+3) *4]
    [root@localhost data]# echo $Y
    20

    五、条件判断

    1基本语法

    [ condition ]注意condition前后要有空格  condition是判断内容

    注意:条件非空即为true[ atguigu ]返回true[] 返回false

    2. 常用判断条件

    1两个整数之间比较

    = 字符串比较

    -lt 小于less than -le 小于等于less equal

    -eq 等于equal -gt 大于greater than

    -ge 大于等于greater equal -ne 不等于Not equal

    2按照文件权限进行判断

    -r 有读的权限read -w 有写的权限write

    -x 有执行的权限execute

    3按照文件类型进行判断

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

    -e 文件存在existence -d 文件存在并是一个目录directory

  • 相关阅读:
    thinkphp redis实现文章点赞功能并同步入mysql
    phpstorm2020.1最新版永久破解
    mysql修改sql_mode为宽松模式
    用为知发布博客到博客园、使用Wiz编写和发布博客园(cnblogs)博客
    Vim命令大全
    Vim教程
    GDB教程详解
    TCMalloc 对MYSQL 性能 优化的分析
    TCMalloc 安装和使用
    使用Tcmalloc进行堆栈分析
  • 原文地址:https://www.cnblogs.com/frankruby/p/14340580.html
Copyright © 2020-2023  润新知