shell进阶之路的基本用法知识和问题解决(基本语法、正则、日期转化、&符号)

    大约3周前因为工作需要开始接触并使用shell去编程,估计因为是一个合格的开发,新入手一门语言也并没有给我造成多大的恐慌。在解决实际问题后,一直想写下来学到的知识点以便未来某一天再用到会有新的心得,无奈,直到现在才能静心下来总结。

    这次接触shell, 主要通过读项目shell的源码和公司内部shell学习PPT,以及解决需求过程中网上学习等这三个途径来深入的。

一.基本语法

    我接触的shell, 具体说是bash 

    1.##!/bin/bash开头,作用是通知系统用哪种命令解释器执行脚本,这里用bash,当bash命令解释器执行这个脚本时,#作为注释行标识,该行已经完成它的任务了,所以不影响脚本执行

    2.定义变量或常量,不区分变量还是常量(等号左右两边无空格,不以分号逗号结尾但回车换行),但区分作用域(local标识局部变量)

    3.脚本赋予执行权限 chmod +x test.sh  执行脚本./test.sh

    4.输出语句 echo "hello,world"

例如

#!/bin/bash
str="Hello World !"
echo "Hello World ! de length is ${#str}"  #13 str长度  
echo "${str}"                     #str内容
echo ${str}                       #str内容

    5.常用基本语法结构 if case for

  例如:

#!/bin/bash
if [ 2 < 10 ]; then
    echo "小于"
else
    echo "大于"
fi
if [ 2 -lt 10 ]; then
    echo "小于"
else
    echo "大于"
fi

    6.函数、方法的定义和调用

    7.字符串查找字符的方法

例如

#!/bin/bash
str="pachira is a great company"
echo `expr index "$str" r`    #6
echo `expr index "$str" om`   #21  从1开始算起,只计算0字符,并不匹配查找m字符

    8.数组

例如:

#!/bin/bash
array1[0]=123
array1[1]=abcdefg
echo ${array1}     #123 打印数组【0】
echo ${array1[*]}  #123 abcdefg 打印数组
echo ${array1[@]}  #123 abcdefg 打印数组

length1=${#array1[@]}
length2=${#array1[*]}
length3=${#array1[1]}
echo ${length1}   #2 数组长度
echo ${length2}   #2  数组长度
echo ${length3}   #7 数组下标识1的字符串的长度

arrayValue=${array1[1]}  
echo ${arrayValue}   #abcdefg
echo ${#arrayValue}  #7 数组下标识1的字符串的长度

    9.从键盘获取输入的参数

     目前我接触的是两种方式

      第一种  脚本命令执行时直接空格跟着参数(多个参数空格分开),脚本代码使用$@,$1,$2等开给变量赋值后使用

      第二种 脚本代码上控制从键盘中输入read -p

       例如:

#!/bin/bash
read -p "input a:" a
read -p "input b:" b
total1=$((a+b))     #必须运算过后给$后多加一层(),不然有误
declare -i total2=$a+$b
echo -e "a + b is $total1 \n"
echo -e "a + b is $total2 \n"

    10.脚本调试技巧

     sh [-nvx] test.sh

     -n:查询脚本编译错误,但是不执行

     -v:执行脚本前会把整个脚本内容先显示出来后再打印结果

     -x:每执行一步脚本,会先打印出这行脚本内容后再打印结果,只将用到的脚本内容显示出来

二.关于正则

     关于正则,shell并不识别\d等代替具体数字的内容,必须换成[0-9]

三.关于日期转化

   判断日期与正则的关系,举例(这里的例子里的正则并不严谨,只是作为例子看)

#!/bin/bash
datestr='2015-05-1'
if echo $datestr |grep -Eq "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}" && date -d $datestr +%Y%m%d >/dev/null
then
    echo 'ok'
else 
    echo 'err'
fi
echo "datestr is ${datestr}"

四.关于&符号

    &号,跟在shell脚本命令后(或者键盘输入或者代码里某行以&结尾)是让程序或这行在后台运行,不会自己停止的。

     所以脚本如果使用含有&的参数,&后数据会取不到,并且脚本执行完后也并不结束而是在后台运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值