zoukankan      html  css  js  c++  java
  • Shell学习(1)---脚本入门

    以下知识来自尚硅谷。

    一、概述

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

    二、脚本入门

    1、脚本格式

    脚本以#!/bin/bash开头(指定解析器)

    2、第一个Shell脚本:

    需求:创建一个Shell脚本helloworld.sh,输出helloworld

      编辑helloworld.sh脚本:

    #!/bin/bash
    
    echo "helloworld"
    View Code

      

    执行helloworld.sh脚本:sh helloworld.sh 或者 bash helloworld.sh  

      如果直接 ./helloworld.sh来执行,若需要执行权限,则可先chmod 777 helloworld.sh,再执行。

    三、变量

    (1)系统变量

    1、常用系统变量:

    • $HOME:家目录
    • $PWD:当前所在目录
    • $SHELL:当前所用的shell编译器
    • $USER:当前的用户

     (2)自定义变量

    1.基本语法

    (1)定义变量:变量=值(等号两边不能有空格)

    (2)撤销变量:unset 变量

    (3)声明静态变量:readonly变量,注意:不能unset

     2、定义规则

    (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。

    (2)等号两侧不能有空格

           (3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。

           (4)变量的值如果有空格,需要使用双引号或单引号括起来。如 D="banzhang love mm"

    (5)可把变量提升成全局环境变量,可供其他shell程序使用。export 变量名

    (3)特色变量:$n

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

     (4)特色变量:$#

    1、$#    (功能描述:获取所有输入参数个数,常用于循环)。

    (5)特色变量:$*、$@

    • $*    (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
    •   $@  (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

    • 比较$*和$@区别

    (a)$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。

    (b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数。

    (6)特色变量:$?

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

     

    (7)字符串前加x

    linux 中 if [ "x${var}" = "x" ] 什么意思

    如下面的linux命令
    if [[ x"${aa}" == x"b" ]]
    then
        A=$aa
    else
     B=$aa
    fi

    其中的if 第一行是什么意思
    表示字符串${aa}和字符串"b"相等,其中{}用以区分字符串,{}内部被当做一个整体处理,$是取内容运算符,表示其后所接变量的值.
    加上x是为了,防止aa为空时的语法错误。
     
    if [[ "x${aa}" == "x" ]]------>这是判断aa是否为空。

    四、运算符

    (1)“$((运算式))”或“$[运算式]”

    (2)expr  + , - , *,  /,  %    加,减,乘,除,取余

    注意:expr运算符间要有空格

    实操:

     

     五、条件判断

    1.基本语法

    [ 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)

     

     六、流程控制

    1、if判断

    if [ 条件判断 ];then

    ******

    elif [ 条件判断 ];then

    ******

    fi

     

     2、case语句

    注意事项:

    1)      case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

    2)      双分号“;;”表示命令序列结束,相当于java中的break。

    3)      最后的“*)”表示默认模式,相当于java中的default。

         上面的例子,如果输入变量为4,结果仍打印renyao。

    3、for循环

     

     4、while循环

     七、 read读取控制台输入

     

     八、函数

    1、系统函数

    • basename:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
    • dirname:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

     2、自定义函数

    1.基本语法

    [ function ] funname[()]

    {

            Action;

            [return int;]

    }

    funname

    2.经验技巧

            (1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。

            (2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

     

  • 相关阅读:
    String与StringBuffer常用API
    Java常用类库与工具课后习题3-5
    Java异常课后习题编程题
    Java异常课后习题简答题
    Visio的快速使用和功能理念
    Google免费新书-《构建安全&可靠的系统》
    名字的由来
    日志分析-利用grep,awk等文本处理工具完成(2019-4-9)
    关于docker--详解安装,常规操作,导入导出等(2017-3-29)
    Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11)
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/12487388.html
Copyright © 2011-2022 走看看