shell脚本快速入门

shell和shell脚本

  • shell是一种应用程序,用户通过该应用程序提供的界面访问操作系统内核的服务。

  • shell脚本(shell script)是一种为shell编写的脚本程序。

第一个shell脚本

  • 格式:shell脚本一般以如下的格式开始

    #!/bin/bash
    # 或者
    #!/usr/bin/php
    

    一般‘#!’是一个约定的标记,其告诉系统该脚本需要什么解释器来执行。

  • 脚本的执行

    ./test.sh
    

    注意,脚本的执行一定要写为./test.sh,而不是test.sh,运行其他二进制的程序也是一样的道理。如果直接写test.sh,linux系统会去PATH中查找有没有test.sh,而只有/bin, /sbin, /usr/bin,/usr/sbin等这些路径在PATH中,当前目录一般不再PATH中,所以写成test.sh是找不到命令的,要使用./test.sh表明在当前路径下查找。

  • 脚本作为解释器参数

    这种运行方式是,直接运行解释器,解释器的参数就是shell脚本的文件名:

    #!/bin/sh test.sh
    #!/bin/php test.php
    

    使用这种方式运行的脚本,不需要在第一行制定解释器信息。

变量

变量定义

定义变量时,变量名不加符号$,比如:

test_var="abcd"

注意:变量名和等号之间不能有空格,这点跟其他的语言不太一样。

使用变量

使用一个定义过的变量,只需要在变量名前加符号$,比如:

test_var="abcd"
echo $test_var
echo ${test_var}

变量名外边的花括号是可选的,加括号是为了在一个比较长的代码中识别出变量的边界。

推荐给所有变量加上花括号,这是一个好的变成习惯。

变量重定义

test_var="abcd"
echo ${test_var}

test_var="efgh"
echo ${test_var}

重定义时,只需要对其重新赋值即可。

注释

以符号#开头的为注释,编译器不会执行。

多行注释

sh不支持多行注释,每一行的头部加一个#可以注释掉该行。

技巧:如果开发过程中,遇到大段的代码需要临时注释起来,过一会儿又需要取消注释,此时可以使用如下方法。

​ 大段注释可以把需要注释掉的一段代码用一对花括号括起来,定义成一个函数,没有地方调用该函数,当然这一块代码就不会执行,能够达到和注释一样的效果。

字符串

shell中的字符串可以用单引号,也可以使用双引号,也可以不适用引号。

单引号

​ str=‘this is a string’

单引号使用的限制:

  • 单引号中的任何字符都会原样输出,单引号字符串中的变量是无效的。
  • 单引号字符串中不能出现单引号(对单引号使用转义符后也不行)

双引号

test_var="abcd"
str="Hello, I know your name is \"$test_var\" ! \n"
#上一行代码中\是"的转义符
  • 双引号字符串中可以有变量
  • 双引号中可以出现转义字符

字符串操作

字符串拼接
stringA="abcd"
stringB="efgh"
echo $stringA $stringB
获取字符串长度
string="abcd"
echo ${#string}
#输出:4
提取子字符串
string="alibaba is a great company"
echo ${string:1:4}
#输出:liba

流程控制

和JAVA,PHP等语言不一样,sh的流程控制不为空,在sh中,如果if对应的else分支没有语句执行,就不要写这个else。

if else

  • if

    if condition
    then
    	command1
    	command2
    	...
    	commandN
    fi
    

    写成一行(适用于终端命令提示符):

    if 'ps -ef | grep ssh'; then echo hello; fi
    

    末尾的fi就是if倒过来拼写。

    • if else
    if condition
    then
    	command1 
    	command2
    	...
    	commandN
    else
    	command
    fi
    
  • if else-if else

    if condition1
    then
    	command1
    elif condition2
    	command2
    else
    	commandN
    fi
    
    • for while
    for var in item1 item2 ... itemN
    do
    	command1
    	command2
    	...
    	commandN
    done
    

    写成一行:

    for var in item1 item2 ... itemN; do command1; command2… done;
    
  • C风格的for

    for (( EXP1; EXP2; EXP3 ))
    do
    	command1
    	command2
    	command3
    done
    
  • 无限循环

    while :
    do
    	command
    done
    

常用的命令

  • 字符串领域:grep, awk, sed三剑客。grep负责找出特定的行,awk将行拆分成多个字段,sed则可以实现更新插入删除等写操作。

  • ps:查看进程列表

  • grep

  • awk

  • sed

  • xargs

  • curl

感谢github@qinjx 的整理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值