Chipseq Shell学习

Shell脚本语言学习一

2017-11-16  本文已影响0人  SimpleBK

Shell脚本语言学习二
Shell脚本语言学习三


首先 进行基本的文件创建,以及权限查询修改等


其次 Shell环境介绍


最后 开始Shell语言的基础学习

以下都是使用Shell语言写在shell.sh文件中的脚本代码
在终端中执行这个脚本文件命令: ./shell.sh 而不是shell.sh 运行其它二进制的程序也一样,直接写 shell.sh,linux 系统会去 PATH 里寻找有没有叫 shell.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 shell.sh 是会找不到要执行的脚本文件的,也就执行不了文件中的命令,要用 ./shell.sh (文件名前加上./) 告诉系统说,就在当前目录找。

2> 只读变量 -> 类似于通常所讲解常量

关键字:readonly(只读,不能够修改)
脚本代码:
       name="HelloApp"
       readonly name
如果后面还有脚本代码给 name 赋值,   
       eg: name="hehe"
       echo $name
则终端执行文件输出的值还是 'HelloApp', 并且会出现报错 './shell.sh: line 10: name: readonly variable'

3> 将变量删除

语法:unset(干掉了)
案例:unset 变量名
脚本代码:
      name="Andy"
      echo $name
      unset name
      echo $name
第一个输出的值 Andy, 第二个输出的值为空, 如果先将变量用 readonly 修饰,也是删除不了的.

4> 变量类型

类型一: 本地变量     
作用域: 整个bash进程都可以使用
语法(直接写的形式): name="bash"

类型二: 局部变量
作用域: 当前代码段
修饰符: local
语法: local name="Andy"

类型三: 环境变量
作用域:当前shell进程以及子进程
语法:export name="Dream"

类型四: 位置变量
脚本代码:
     fileName=${0}
     name=${1}
     age=${2}
     sex=${3}
     echo "姓名:${name} 年龄:${age} 性别:${sex}"
终端执行命令:
    ./shell.sh andy  18  男
回车输出:
    姓名:andy 年龄:18 性别:男
说明: 
    ${0}表示脚本文件名称
    参数从1开始

类型五: 特殊变量
    $0 是特殊变量,表示文件名称
    $? 也是特殊变量,表示返回上一个命令的执行状态返回值
        0:表示执行成功
        1:程序执行结果
        2:表示程序状态返回码(0-255)
        系统预留错误(1、2、127)
    $# 表示当前截止的脚本文件的参数个数
    $* 表示参数列表,将所有的参数列表组成一个字符串
    $@ 表示参数列表,各个参数是分开的
    $$ 表示当前Shell进程的ID
    $! 表示执行的上一个指令的PID(Progress ID),也就是Shell最后运行的后台Process的PID
脚本代码:
      echo ${0}
      echo ${?}
      echo ${#}
      echo ${*}
      echo ${@}
      echo ${$}
      echo ${!}
终端执行命令:
      ./shell.sh andy 18 男
输出结果:
      ./shell.sh
      0
      3
      andy 18 man
      andy 18 man
      1691
      空值

1> 字符串 -> 单引号

脚本代码:
      name='Andy'
      echo ${name}
终端执行输出:
      Andy

2> 字符串 -> 双引号

脚本代码:
      name="Andy"
      echo ${name}
终端执行结果:
      Andy

3> 字符串 -> 拼接

方式一
脚本代码:
      name="jack"
      age=18
      sex="man"
      info="${name} ${age} ${sex}"
      echo $info
终端执行结果:
      jack 18 man

方式二
脚本代码:
      name="Andy"
      age=100
      sex="男"
      info=" 姓名:"${name}"   年龄:"${age}"  性别:"${sex}""
      echo ${info}
终端执行输出:
      姓名:Andy 年龄:100 性别:男

4> 字符串 -> 获取字符串长度

脚本代码:
      name="HeHe"
      echo ${#name}
终端执行输出:
      4

5> 字符串 -> 截取

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

案例需求一: 从字符串第三个开始截取,截取三个
脚本代码:
      name="I have a dream!"
      result=${name:2:3}
      echo $result
终端执行输出:
      hav

案例需求二: 从字符串第五个开始截取,到最后一个结束.
方式一
脚本代码: 
      name="I have a dream!"
      result=${name:4}
      echo $result
终端执行输出:
      a dream!
方式二
      name="I have a dream!"
      length=${#name}
      result=${name:4:length-4}
终端执行输出:
      ve a dream!

6> 字符串->删除

语法一:${变量名#删除字符串 正则表达式}
作用:从左边开始匹配要删除的字符串

案例需求一: 分别从左右侧删除字符串看效果
脚本代码一:
      name="I have a Dream"
      result=${name#Dream}
      echo ${result}
终端执行输出:(没有匹配到)
      I have a Dream
原因: 暂时测试发现,这种只能从字符串左侧第一个字符开始检索删除

脚本代码二:
      name="I have a Dream"
      result=${name#I}
      echo ${result}
终端执行输出:
      have a Dream


案例需求二: 查找指定字符串第一个,并且删除前面多有的字符串(包含自己)
脚本代码:
      name="I have a Dream"
      result=${name#*a}
      echo ${result}
终端执行输出:
      ve a Dream


案例需求三:执行删除范围(第一个开始删除,删除到哪里)
脚本代码
      name="I have a Dream"
      result=${name#I*D}
      echo ${result}
终端执行输出:
       ream

语法二: ${变量名##删除字符串 正则表达式}
作用:从字符串结尾(右边)开始匹配要删除字符串

脚本代码:
      name="I have a Dream"
      result=${name##*a}
      echo ${result}
终端执行输出:
      m

总结: 语法一和语法二都是从左侧第一个字符开始删除到右边,只是检查方向不一样

语法三:${变量名%删除字符串 正则表达式}
作用:从字符串结尾开始匹配,删除匹配的字符串.

案例需求一:查找第一个字符(匹配第一个)
脚本代码一:
      name="I have a Dream"
      result=${name%a}
      echo ${result}
终端执行输出:(没有匹配到)
      I have a Dream
原因: 暂时测试发现,这种只能从字符串右侧第一个字符开始检索删除

脚本代码二:
      name="I have a Dream"
      result=${name%m}
      echo ${result}
终端执行输出:
      I have a Drea


案例需求二:查找指定字符串第一个,并且删除前面所有字符(包含自己)
脚本代码:
      name="I have a Dream"
      result=${name%h*}
      echo ${result}
终端执行输出:
      I


案例需求三: 指定删除范围
脚本代码:
      name="I have a Dream"
      result=${name%r*m}
      echo ${result}
终端执行输出:
      I have a D

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

案例需求: 查找指定字符最后一个,并且删除前面所有的字符(包含自己)
脚本代码:
      name="I have a Dream"
      result=${name%%a*}
      echo ${result}
终端执行结果:
      I h

总结: 语法三和语法四都是从右侧第一个字符开始删除到左边,只是检查方向不一样

总结:

思考题: 如何删除字符串中间部分?

如果上述有错误的地方,敬请告知,谢谢!

上一篇 下一篇

猜你喜欢

热点阅读