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
    评论
回答: shell脚本的基本语法和命令包括以下几个方面。首先,脚本的第一行通常是脚本声明,用来告诉系统使用哪种Shell解释器来执行该脚本。其次,在脚本中可以使用注释信息,以#开头,来对脚本功能和命令进行介绍和说明。接下来,可以在脚本中编写可执行的命令,这些命令可以是Linux命令或者其他的Shell命令。 Shell脚本命令的工作方式有两种:交互式和批处理。在交互式模式下,用户每输入一条命令就立即执行。而在批处理模式下,用户可以事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中的多条命令。 创建一个Shell脚本可以使用vim或vi编辑器来创建一个.sh文件,然后在脚本中书写Shell脚本声明和命令。注意,保存后的脚本是没有运行权限的,需要使用chmod命令给它授权,才能执行。执行文件时,可以使用./来运行shell脚本,也可以使用/bin/bash命令来执行脚本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Linux学习系列五:Shell命令脚本的基本语法](https://blog.csdn.net/qq_37085158/article/details/127165599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [shell脚本基本语法](https://blog.csdn.net/weixin_42596778/article/details/106197014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值