美文网首页
一、Shell语法(一)创建、变量、字符串

一、Shell语法(一)创建、变量、字符串

作者: 默默_David | 来源:发表于2020-05-22 17:36 被阅读0次

    一、Shell语法(一)创建、变量、字符串
    一、Shell语法(二)打印、数组、参数传递、运算符、流程控制
    三、Shell语法(三)文件包含、cat、获取用户输入、printf、函数、重定向

    1.基本介绍

    脚本语言->编译库(应用技术)
    shell种类非常多,Bash是所有的操作系统默认脚本语言(免费,易用)

    2.创建shell程序

    2.1 创建

    touch hello.sh

    2.2 编写shell程序

    定义文件声明
    #!/bin/bash
    echo "hello world"

    #!表示约定标记,它会告诉系统这个脚本需要什么养的解释器来执
    行,即是一种脚本体现
    echo 输出文本信息的命令

    2.3 修改文件权限

    2.3.1 文件拥有者 同组用户 其他用户
    2.3.2 查看文件权限
    命令: ls -l hello.sh
    -rw-r--r--
    最前面的-表示文件类型,如果是目录文件显示为d
    后面的三个三个分开,如此例rw- r-- r--
    r:读 w:写 x:执行 -表示没有这项权限
    2.3.3 修改文件权限
    命令: chmod 权限 hello.sh

    chmod -rwxr-xr-x hello.sh
    

    由于r表示4,w表示2,x表示1,也可以如下写法

    chmod 755 hello.sh
    

    2.3.4 执行脚本文件
    命令:./hello.sh

    2.4 注释

    #表示注释
    比如

    #!/bin/bash
    #输出
    echo "hello"
    

    在Shell脚本中,没有多行注释,只有单行注释

    3.变量

    3.1 变量定义的注意事项
    • 定义变量的时候,变量名处不需要加$符号,因为$符号表示取值
    • 变量名和等号之间不能有空格
    • 变量名首字母必须是字母或者下划线
    • 变量名中间不允许有空格
    • 不允许使用标点符号
    name="单身狗"
    
    3.2 只读变量 readonly
    name="单身狗"
    readonly name
    name="有女票"#报错:./hello.sh: line 42: name: readonly variable
    
    #可以在定义的时候设置为只读变量readonly name="TEST"
    readonly name="单身狗"
    echo name
    
    3.3 删除变量 unset
    name="单身狗"
    echo $name
    unset name
    echo $name
    echo "执行"
    
    #打印结果:
    #单身狗
    #
    #执行
    
    3.4 变量类型
    3.4.1 本地变量

    作用域整个bash进程可用

    name="单身狗"
    
    3.4.2 局部变量 local

    作用域:当前代码段(修饰符为local)

    local name="单身狗
    
    3.4.3 环境变量 export

    作用域:当前shell进程以及子进程

    export name="单身狗"
    
    3.4.4 位置变量

    脚本代码

    filename=${0}
    name=${1}
    age=${2}
    sex=${3}
    echo "姓名:${name},年龄:${age},性别:${sex}"
    #执行脚本 ./hello.sh 甜甜 18 女
    
    #打印结果:
    #姓名:甜甜,年龄:18,性别:女
    

    ${0}表示脚本文件名称
    其他参数默认从1开始 0默认为文件名称

    3.4.5 特殊变量
    1. ${0}->特殊变量->文件名称

    2. ${?}->表示返回上一个命令执行状态返回值

    • 0:表示执行成功
    • 1: 程序执行结果
    • 2: 表示程序状态返回码(0-255),系统预留错误(1、2、127)
    echo ${0}
    echo ${?}
    
    #打印结果
    #./hello.sh
    #0
    #./hello.sh: line 79: name: command not found
    #127
    
    
    1. $# -> 参数个数

    2. $*->参数列表

    3. $@->参数列表

    4. $$->获取当前shell进程ID

    5. $!->执行上一个指令PID

    6. $*$@的区别

      echo $#
      echo $*
      echo $@
      echo $$
      echo $!
      #执行:./hello.sh 甜甜 18 女
      
      #打印结果:
      #3
      #甜甜 18 女
      #甜甜 18 女
      #1673
      
      

      $*$@的区别
      $*->参数列表: 将所有的参数组成一个字符串->"甜甜 18 女"
      $@->参数列表: 分开的->"甜甜" "18" "女"

    4.字符串

    4.1 双引号和单引号

    双引号和单引号都可以用于标记字符串,它们没有什么区别

    name1="aaa"
    name2='bbb'
    echo $name1
    echo $name2
    
    #打印结果:
    #aaa
    #bbb
    
    4.2 字符串->拼接

    方式一:

    name="aaa"
    age=10
    sex='男'
    info="$name $age $sex"
    echo $info
    
    #打印结果:
    #aaa 10 男
    

    方式二:

    name="aaa"
    age=10
    sex='男'
    info="姓名:$name 年龄:$age 性别:$sex"
    echo $info
    
    #打印结果:
    #姓名:aaa 年龄:10 性别:
    
    4.3 获取字符串长度

    语法结构:${#变量名}

    name="123456789"
    echo ${#name}
    
    #打印结果:
    #9
    
    4.4 字符串截取

    语法:${变量名:开始位置:截取长度}
    案例一:从字符串下标为3的开始截取,截取4个

    name="123456789"
    echo ${name:3:4}
    
    #打印结果
    #4567
    

    案例二: 从第5个开始截取,到最后一个结束

    name="123456789"
    length=${#name}
    #方式一:算出长度
    echo ${name:5:$length-1}
    #方式二:自动匹配
    echo ${name:5}
    
    #打印结果:
    #6789
    #6789
    
    4.5 字符串删除
    • 语法一:${变量名}#删除字符串 正则表达式

    作用:从字符串开头(左边)开始匹配要删除的字符串
    案例一:

    name='123456789'
    result=${name#56}
    echo $result
    #原因:匹配不到,第一个是1,而我们要匹配的是56
    
    #打印结果:
    123456789
    

    案例二:

    name='123456789'
    result=${name#12}
    echo $result
    
    #打印结果:
    #3456789
    

    案例三: 查找指定字符第一个,并且删除签名所有的字符(包含自己)

    name='123456789'
    result=${name#*4}
    echo $result
    
    #打印结果:
    #56789
    

    案例四:指定删除范围

    name='123456789'
    result=${name#3*6}#删不了,因为从第一个开始匹配
    echo $result 
    result=${name#1*6}#删除成功
    echo $result
    
    #打印结果
    #123456789
    #789
    
    • 语法二:${变量名##删除字符串 正则表达式}

    作用:从字符串结尾(右边)开始匹配要删除字符串

    name='123456789'
    result=${name##*6}
    echo $result
    
    #打印结果
    #789
    

    总结:
    语法一和语法二,都是从左边删到右边,查找方向不一样

    • 语法三:${变量名%删除字符串 正则表达式}

    从字符串结尾(右边)开始匹配,删除匹配的字符串。

    案例一:查找第一个字符(匹配第一个)

    name='123456789'
    result=${name%4}#从右边开始查,查不到
    echo $result
    result=${name%9}
    echo $result
    
    #打印结果:
    #123456789
    #12345678
    

    案例二:查找指定字符第一个,并且删除前面所有字符(包含自己)

    name='123456789'
    result=${name%4*}
    echo $result
    
    #打印结果:
    #123
    

    案例三:指定删除范围

    name='123456789'
    result=${name%3*6}#查找不到
    echo $result
    result=${name%3*9}
    echo $result
    result=${name%3*}
    echo $result
    
    #打印结果:
    #123456789
    #12
    #12
    
    • 语法四:${变量名%%删除字符串 正则表达式}
    name='123456789'
    result=${name%%5*}
    echo $result
    
    #打印结果:
    #1234
    

    总结:
    从左边删除到右边
    #->表示查询方向从左到右
    ##->表示查询方向从右到左

    从右边删除到左边
    %->表示查询方向从右到左
    %%->表示查询方向从左到右

    相关文章

      网友评论

          本文标题:一、Shell语法(一)创建、变量、字符串

          本文链接:https://www.haomeiwen.com/subject/cdkcahtx.html