shell脚本编程学习记录

2019-01-18

废话没有直接开始写:

#!/bin/bash  

一般脚本用上面这一句开始,像Python一样是类似于选择什么解释器来执行,

一、关于变量

变量定义:
 myname="changhengyu"

变量定义有别于其他编程语言,变量名要和等号之间没有空格。

变量使用

echo $myname
或者
echo "hello everyone myname is ${myname}lalala"#

使用时只需要美元符号取值即可
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界

只读变量

就是在变量定以后,使用readonly进行一次修饰,就变成只读变量,只读变量不允许被修改,不允许本unset删除。

变量删除

unset这个命令用来删除已经定义的变量,删除再调用会报错,除非再次赋值。

shell字符串

  • 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。
字符串的单引号
str='this is string'

单引号字符串的限制:

  • 单引号中的任何字符串都会原样输出,单引号中的变量是无效的。
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
字符串的双引号

双引号就高级一些,中间可以加变量也可以,用转义字符。

字符串拼接

突然插入一个参考网址,就是那个菜鸟教程的网址
下面的笔记有很多拼接和截取的方式,比源站还能详细一些。

就想到哪里写哪里吧

1.判断的各种标志
  • -eq 两值 相等是真
  • -ne 两值 不等是真
  • -gt greater than
  • -ge greater&equal的缩写
  • -lt lower than的缩写 表示小于为真
  • -le lower&equal的缩写 表示小于等于为真

2.用于字符串

  • =
  • !=
  • -z 字符串长度为0 为真
  • -n 字符串长度不为0 为真
  • -e 文件存在 为真
  • -r 文件存在 且有读权限
  • -w
  • -x
  • -s
  • -d 文件存在 且是一个目录

使用时配合python 的套路

通过python的print输出一些我们想要得到的信息,然后使用cut 的方式截取变量进行赋值。
以下是自动更新二进制的做成成果物的脚本

value=`python $(pwd)/parseconfig.py -y $(pwd)/config/config.yaml`
otherpathlist=`echo $value|cut -d "," -f1` 
target_count=`echo $value|cut -d "," -f2` 
srcpathlist=`echo $value|cut -d "," -f3`
url_list=`echo $value|cut -d "," -f4`
branch_list=`echo $value|cut -d "," -f5`
xml_list=`echo $value|cut -d "," -f6`

scriptpath=$(pwd)
test_result_targetpath=`echo $otherpathlist|cut -d " " -f2`

python 方面的脚本输出代码

        print pathstr + ','
        print len(self.attributelist['TARGET'].keys())
        print ','
        for target in self.attributelist['TARGET'].keys():
            print self.attributelist['TARGET'][target]['srcpath'] + " "
        print ','
        for target in self.attributelist['TARGET'].keys():
            print self.attributelist['TARGET'][target]['url'] + " "
        print ','
        for target in self.attributelist['TARGET'].keys():
            print self.attributelist['TARGET'][target]['branch'] + " "
        print ','
        for target in self.attributelist['TARGET'].keys():
            print self.attributelist['TARGET'][target]['xml'] + " "

配合食用效果更佳
然后将带空格的字符串转化成shell食用的list列表,
进行遍历食用。或者可以直接遍历食用但是我一直没有找到办法,就这样吧。


再写个啥呢,把cut 和 set 写一下?
还有那个传入参数取出的时候食用 * 和使用@ 的区别写一下,
先发布了,回头再写 2019年4月9日11:55:11 快到午饭的时间了

你可能感兴趣的:(shell脚本编程学习记录)