shell初学习

来源:互联网 发布:kindle 阅读软件 编辑:程序博客网 时间:2024/05/19 00:50

简介

  • 开发者通过shell语音操作系统内核服务。
  • 脚本语言,编译静态库
    这里写图片描述

第一个shell

1. 创建shell文件


touch hello.sh

2. 编写shell程序

#!/bin/bash echo "Hello world"

#! 表示约定标记,告诉系统用什么解释器执行这个文件,即是一种体现 这里是常用的bash类型
echo 输出信息 相当于 print

3. 修改文件权限

权限结构

分为了4个部分(QQ群为例)
第一部分:文件类型->QQ群类型
第二部分:文件所有者->群主
第三部分:所有者同组用户->管理员
第四部分:其他用户->群成员
这里写图片描述

shell脚本语法

注释

#输出hello world echo "Hello world"

变量

变量定义->注意事项

  1. 定义变量时候,变量名出不需要加”$”符号
  2. 变量名和等号不能够有空格(和我们的一般语言不一样)
  3. 变量名首字母必需是字母+下划线(a-z、A-Z)
  4. 变量名中间不允许有空格
  5. 不允许使用标点符号

只读变量

关键字:readonly(只读,不能够修改)
脚本代码

                    name="HelloApp"                    readonly name                    #./hello.sh: line 35: name: readonly variable                    name="smile2017"                    echo "执行了"

删除变量

语法:unset(干掉了)
案例:unset 变量名

变量类型

本地变量
  1. 作用域整个bash进程可以使用
    语法:name=”Dream”
  2. 局部变量
    作用域:当前代码段(修饰符:local)
    local name=”Andy”
  3. 环境变量
    作用域:当前shell进程以及子进程
    语法:export name=”Dream”
  4. 位置变量
    脚本代码
    #!/bin/bash                        name=${0}                        age=${1}                        sex=${2}                        echo "姓名:${name}   年龄:${age}  性别:${sex} "

执行脚本
./hello.sh Jeff 150 男
执行结果
${0}表示脚本文件名称
参数从1开始

  1. 特殊变量

    • ${0}->特殊变量->文件名称
    • ${?}->表示返回上一个命令执行状态返回值

      • 0:表示执行成功
      • 1:程序执行结果
      • 2:表示程序状态返回码(0-255)
        系统预留错误(1、2、127)

      案例测试

      #!/bin/bash                    echo ${0}                    echo ${?}
    • $#->参数个数

    • $*->参数列表
    • $@->参数列表
    • $$->后去当前shell进行ID
    • $!->执行上一个指令PID
    • {@}区别?
      脚本代码
    #!/bin/bash                        echo ${*}                        echo ${@}
    执行脚本

    ./hello.sh Andy 200 男

    脚本结果

    • ${*}->参数列表:将所有的参数组成一个字符串 “Andy 200 男”
    • ${@}->参数列表:分开的->”Andy” 200 “男”

字符串

单引号、双引号都可以

拼接

  1. 方法1:info=”name{age} ${sex}”
#!/bin/bash                        name="Andy"                        age=100                        sex="男"                        info="${name} ${age} ${sex}"                        echo ${info}

结果

“Andy 100 男”

  1. 方法2 info=” 姓名:”name""{age}” 性别:”${sex}” “
    #!/bin/bash                        name="Andy"                        age=100                        sex="男"                        info=" 姓名:"${name}"   年龄:"${age}"  性别:"${sex}"  "                        echo ${info}

字符串长度

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

#!/bin/bash                    name="Andy"                    echo ${#name}

结果

4

字符串截取

语法:${变量名:开始位置:截取长度}

案例一:从字符串第3个开始截取,截取3个

name="I have a Dream"                    result=${name:2:3}                    echo ${result}

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

    name="I have a Dream"                        length=${#name}                        result=${name:5:length-1}                        echo ${result}

或者

    name="I have a Dream"                        length=${#name}                        result=${name:5:length-1}                        echo ${result}

字符串删除

str="abbc,def,ghi,abcjkl"echo ${str#a*c}     # 输出,def,ghi,abcjkl  一个井号(#) 表示从左边截取掉最短的匹配 (这里把abbc字串去掉)echo ${str##a*c}    # 输出jkl,             两个井号(##) 表示从左边截取掉最长的匹配 (这里把abbc,def,ghi,abc字串去掉)echo ${str#"a*c"}   # 输出abbc,def,ghi,abcjkl 因为str中没有"a*c"子串echo ${str##"a*c"}  # 输出abbc,def,ghi,abcjkl 同理echo ${str#*a*c*}   # 空echo ${str##*a*c*}  # 空echo ${str#d*f)     # 输出abbc,def,ghi,abcjkl,echo ${str#*d*f}    # 输出,ghi,abcjkl echo ${str%a*l}     # abbc,def,ghi  一个百分号(%)表示从右边截取最短的匹配echo ${str%%b*l}    # a             两个百分号表示(%%)表示从右边截取最长的匹配echo ${str%a*c}     # abbc,def,ghi,abcjkl可以这样记忆, 井号(#)通常用于表示一个数字,它是放在前面的;百分号(%)卸载数字的后面; 或者这样记忆,在键盘布局中,井号(#)总是位于百分号(%)的左边(即前面) 

从左边删除到右边
#->表示查询方向从左到右
##->表示查询方向从右到左(最长)
从右边删除到左边
%->表示查询方向从右到左
%%->表示查询方向从左到右(最长)

换行符

echo -e “iPhoneX \n hello未来”

-e:表示开启转义功能

不换行

“-e”开启转义功能,”\c”表示不换行

echo -e "iPhoneX hello未来 \c "        echo "科技"

输出 iPhoneX hello未来 科技

当前时间

echo `date`

`是键盘左上角哪个标点