美文网首页我也码
快速入门Shell(bash)编程

快速入门Shell(bash)编程

作者: 银枪镴枪头 | 来源:发表于2019-10-12 14:44 被阅读0次

    学过其他编程语言的,比如说JAVA都这知道定义变量的时候,需要在变量名之前设置变量类型,比如说需要定义一个字符串:String xxx="......"

    在Shell中定义变量

    在shell定义变量要简单得许多,它更像是javaScript,不需要去指定变量类型,也就是说你的变量值是字符串,变量就是String类型,是数字就是int类型,不过Shell定义变量比javaScript还要简单连var都省略了

    1.显式定义

    echo就是输出语句,注意在使用变量时一定要加$符号,{}可以不加,但建议还是加上,不要偷这一点懒

    2.使用语句定义

    in前面的是变量,后面是变量值,意思是将LiDaiTou这个字符串赋值给变量name,结束时千万别忘记加上'done'

    3.只读变量:readonly+变量名 只读变量不可修改,unset也不能删除

    小结:

        输出时尽量使用双引号,单引号不能随便使用,单引号字符串中的变量无效且单引号中无法转义,因为单引号中无法出现单引号


    Shell中的字符串

    1.获取字符串长度

        获取字符串长度有多种,这里只介绍最简单的一种:${#变量名}

    空格也会算作一个字符串,这里输出的结果是11

    2.提取字符串:${变量名:开始下标:结束下标}

    下标6是一个空格,最后一个下标不算,这里输出I Love,也就是说最终的输出结果是:开始下标~~结束下标-1位置的字符串

    3.查找字符串中的字符处于字符串的第几个位置:`expr index "${变量名}" 需要查找的字符`

    查找L或e字符,哪个字符先出现就计算哪个

    Shell数组

    1.定义数组:数组名=(value1 value2),每个元素用空格分开

    2.1获取数组中的元素

    获取数组中下标为0的元素

    2.2获取数组中的所有元素

    ${file[@]}===${file[*]}

    3.1.获取数组的长度:${#数组名[@]}

    输出:2,这个数组中有2个元素

    3.2获取数组中指定元素的长度:${数组名[下标]}

    输出:5,这个元素有5个字符

    Shell注释

    1.单行注释:#.........

    2.多行注释:

        :<<EOF

            注释内容

            。。。。。

            。。。。。

        EOF

    或者

        :<<'

    注释内容

    。。。。。

    。。。。。

    '

    或者

    :<<!

    注释内容

    。。。。。

    。。。。。

    !


    Shell echo命令

    echo用于在终端输出:echo "......."就会输出对应的字符串

    1.显示转义字符

    \是转义符号,输出:"shell is a part of kali "

    2.开启转义:echo -e "........."

    \n是换行

    3.输出内容定向至文件:echo "........" > 文件名

    如果text在当前目录下,则不用指定父级目录,否则指定完整路径

    4.获取当前时间:echo `date`

    Shell test命令

    此命令用于检查某个条件是否成立,可以是数值、字符和文件三种形式

    1.数值测试

    图片转载自菜鸟教程 1.先创建两个变量。2.判断两个值得逻辑关系,输出num1<num2

    int类型变量的数学运算

    [ ]执行基本的数学运算,输出:300

    2.字符串测试

    图片转载自菜鸟教程

    2.1判断两个字符串值是否相等

    1.创建两个变量接收字符串。2.判断两个字符串是否相同。输出:these two values are not equal

    注意:这里的变量的不是数字类型不用加[ ],直接引用变量就行了

    2.2判断字符串长度是否为空

    输出:str1!=0

    if后面不需要加test,跟上二元表达式就行了

    3.文件测试

    图片转载自菜鸟教程 判断这个文件是否存在如果存在输出第一条语句,否则执行change变量中的命令。输出:/etc目录下的所有文件

    4.Shell中的与(-a)、或(-o)、非(!)

        这三个逻辑操作符它们的优先级为!>-a>-o

    输出第一句话

    Shell流程控制

    其表达式为:

        if [判断条件]

        then

            ...........(执行语句)

        else或elif

            ...........(执行语句)

        fi(记得if语句需要闭合)

    注意:如果没有第二判断条件不需要加上else否则会报错

    值得注意的是在[ ]的首尾都必须加上空格,否则会报以下错误 虽然在Shell中报错仍会执行下面的语句,但若是在以后的渗透实战中可能会造成不可预估的结果

    Shell for循环

    表达式为:

        for 变量名 in value1 value2 value3.......... (每个变量值使用空格分开)

        do

            (执行语句)..................

    done(最后记得闭合)

    每个变量值依次输出,即使是多个字符串也是一样的 结果

    如果你习惯了其他语言的写法,可以像这样写

        for ((i=1;i<10;i++)); do

           (执行语句).........

     done

    第一种写法更像是foreach,其实这两种写法还是有一些区别的,具体怎么用根据实际情况决定

    Shell while语句

        while语句用于不断循环语句,也可以不断从输出语句中输出语句,其语法为:

            while ((条件表达式))或while [条件表达式] 。(区别在于(())内放置的是<、>、=这些符号,而[ ]内放置表达式,如-eq、-gt 、-lt)

            do

                (执行语句)..............

            done

    let命令用于计算一个或多个表达式,计算变量时不需要加$。详情查阅Bsah let命令

    注意:如果使用while(())这种方式,在使用判断符号</>/=时最好不要空格,[ ]这种方式使用判断符号时需要空格


    读取键盘信息

    执行语句的最后加上break不然会陷入死循环

    read + 变量名,它的作用跟Scanner(JAVA)、scanf(C语言)一样


    无限循环

    表达式:

        while :

            do

                (执行语句)............

            done

    也可以写成for (( ; ; ))

    until循环

        与while相反,当条件表达式为true时跳出循环

    语法:

        until [条件表达式]

        do

            (执行语句).............

        done

    输出:9。增长到10的时候跳出循环没有输出

    case选择语句

    语法:

    case value(你设置的变量) in

    1)    执行语句..............

    ;;

    2)    执行语句...................

    ;;

    ...................................

    ;;

    n)    执行语句.................

    ;;

    esac(语句闭合,就是case反过来写)

    每个选项结束时记得机上两个分号。" ;; "

    还有一种简单的写法

    两种写法作用都是一样的

    break和continue

    跟其他语言一样,Shell中也是有跳转语句的,在Shell中跳转语句只能用在for、while和until中

    在这里使用continue最后一句输出语句永远不会被执行,但是用break则会执行

    break跳出所有循环

    continue跳出当前循环

    函数

    其语法与JavaScript有异曲同工值处

    [ function ] 方法名[()]

    {

        (操作执行).......

        [ return int ]

    }

    ⭐:中括号内是可以不写的部分


    1.无参数、不带return

    调用方法是千万别加( )否则脚本无法运行

    2.无参数、带有return

    所有函数在使用前必须先定义,使用$?来接收函数,但$?仅对上一条指令负责

    3.带参数传递

    ⭐:函数中的$n就是调用第n个参数,比如说调用第一个参数就是$1,调用第十个参数是${10},在Shell中当n>=10时在调用时需要加上{ }

    $#是获取参数个数,还有一些特殊参数见下图

    图片转载自菜鸟教程

    输入/输出重定向

        在渗透实战中重定向操作是我们常用的

    图片转载自菜鸟教程

    这个操作其实并不难,通常我们只用得到前面三个

    1.将输出定向到指定文件,>指定文件名,当我我们需要查看某信息时就可以打开这个文件查看

    2.将文件内的内容定向到终端,就是将文件内预制的指令读取出来

    3.追加输出,文件内原有的内容不会被替换

    文件包含

    和其他语言类似,Shell也可以包含外部文件,简单的来说就是把一些公用的方法、代码放置在一个文件中,在需要使用的时候方便另一个文件调用

    1.新创建一个脚本文件:touch 文件名

    2.在新脚本写入代码

    3.在另一个脚本中调用

    ⭐:调用文件格式为. 文件名(.和文件名之间有一个空格)

    4.运行

    ⭐:被调用文件不需要添加可执行权限,只要调用的文件有执行权限就行了

    相关文章

      网友评论

        本文标题:快速入门Shell(bash)编程

        本文链接:https://www.haomeiwen.com/subject/zroopctx.html