Shell脚本的基本语法和简单操作(附简单代码)

一、简述

        1、概念:shell脚本用于接受用户命令,识别命令,执行命令并将结果返回给用户,编写用来控制系统的自动化脚本。

        2、shell脚本的第一行表明使用哪一个shell的解释器,第一行写法:   #!/bin/bash

        3、为了方便识别shell脚本,所以shell脚本一般以.sh结尾,但不是必须以.sh结尾

        4、执行方式,shell脚本的执行方式分为两种

                a、有执行权限时可直接通过 ./文件名  去执行shell脚本

                b、无执行权限时可通过 /bin/bash 文件名 去执行shell脚本

                注:可自行给shell文件添加执行权限,可通过chmod a+x 文件名添加执行权限

        5、shell脚本的注释行是给最开头加上#代表注释,注意:不能分行使用

二、shell变量

        1、概念:变量自定义,用来保存数据,变量要有名称,用来区分和定位变量名(注:shell变量名定义与其他语言变量名定义的区别等号两侧不能有空格)

                例:num=10

        2、使用变量时,要在变量名前加上$符号,若变量名后有其他内容,要将变量名用{}引用,便于变量名区分(最好每个变量名都带{},防止出错)

                第一步:创建shell脚本文件

                   

                第二步:按a/i进入编辑模式,首行添加注释器

                   

                第三步:定义变量,打印变量值

                   

                第四步:按esc退出编辑模式,进入末行模式,按输入:x或:wq 退出并保存

                第五步:当前我们没有权限去执行这个文件,所以可以通过/bin/bash demo.sh去执行文件

                   

                也可给文件增加执行权限后通过./demo.sh执行文件

                   

                以上就是编写执行一个shell脚本的完整流程

3、readonly 设置变量为只读,更改后会报错

                  

                  
4、字符串的一些简单操作

        a、拼接字符串,建议直接使用双引号拼接字符串

                

                

        b、获取字符串长度:

                通过${#变量名}获取字符串长度

                

                

                注:数字长度会将数字转换为字符串后获取长度,以上方法按照字符数进行计算

        c、截取字符串:

                通过下标截取字符串

                

                      

                截取字符串格式${str:初始值:末尾值} 

                超长情况下截取到最后

                如果格式为${str:初始值}则默认从初始值截取到最后

三、数组操作

        1、数组下标从0开始,一组有共同名字的数据,通过下标来区分

        2、shell中怎么去定义一个数组:

                arr=(值1 值2 值3 值4 值5......)

                注意在其它语言中数组定义值和值之间可能通过“,”去分隔,但在shell中数组定义用“ ”空格去分隔

                shell中数组定义也可以通过arr[下标]=值去定义,但不建议

        3、获取数组中的值可通过${arr[下标]}去获取数组中的值

                例:

                        

                        

        4、输出数组的所有内容可通过${arr[@]}或${arr[]*}去完成

                

                

        5、获取数组的长度可通过${#arr[@]}

                

                

        6、获取数组中单个元素的长度可通过${#arr[下标]}去完成

                

                

四、一些操作命令

        1、read :从键盘标准输入,读取一行,将内容交给指定变量

                -p参数:显示出提示内容

                -s参数:隐藏输入内容

                例1:无参数

                        

                        

                例2:带有-p参数

                        

                        

               例三:带有-s、-p参数

                        

                        
                        注意:多个参数时-p放到最后

        2、写入文件

                a、覆盖写入:>

                              

                        

                b、追加写入:>>

                        

                        

        3、注释:单行注释在需要注释的行的开头加上“#”代表注释这一行,代码不会执行这一行。

四、运算符

        1、算数运算符:基本规则 $((表达式))

                + 、-、*、/、%、=(赋值)、==(用来比较数字)、!=(用来比较数字)

                例:

                        

                        

                        注:shell中的除法不会计算小数点后,==和!=一般用于if判断中

        2、关系运算符(只对数字进行比较,除非字符串的值是数字)

                基本规则[ $num1 运算符 $num2 ]         注意[ ]两边空格

                -eq        判断是否两个数相等

                -ne        判断两个数是否不相等

                -gt        判断是否大于

                -ge        判断是否的大于等于

                -lt          判断是否小于

                -le        判断是否小于等于

        3、布尔运算符

                基本规则[ 条件一 运算符 条件二 ]        注意[ ]两边空格

                !        非(取反)基本规则[ ! 条件 ]

                -o        或(两个中有一个为真则表达式为真)

                -a        与(两个同时为真时表达式结果为真)

                注:以上运算符返回真假值,True或False

        4、逻辑运算符

                   &&:逻辑与(同真为真,同假为假)        

                    ||:逻辑或(两个中只要有一个为真则为真,两个都是假则为假,同真为真)

                    注:基本规则[[ 表达式1 运算符 表达式2 ]] 两层[ ]

        5、字符串运算符

                基本规则[ str1 运算符 str2 ]

                =:比较两个字符串是否相等

                !=:比较两个字符串是否不相等

                -z:判断字符串的长度是否为0

                -n:判断字符串的长度是否不为0 

                变量名:检测字符串是否为空

        6、文件测试符(file指文件或目录名称)

                基本规则[ 运算符 $file ]

                -d file:判断file是否是一个目录

                -f file:判断file是否是一个文件

                -r file:判断file是否可读,有一个r权限就可以

                -w file:判断file是否可写,有一个w权限就可以

                -x file:判断file是否可执行,有一个x权限就可以

                -s file:检测文件是否为空,不为空则返回True,对文件有效,对目录无效

                -e file:检测文件或目录是否存在,存在返回True,输入名称可带路径

                注:以上对文件测试符号,不加路径默认是当前路径下

        7、test符号:可抵消一层中括号

五、分支结构

        1、简单if基本规则:

                if [ 表达式 ]

                then        

                        当表达式成立时要执行的操作及语句

                fi

                例:

                        

                        

                注:简单if只考虑为真不考虑为假的情况

        2、常规if的基本规则:

                if [ 表达式 ]

                then        

                        当表达式成立时要执行的操作及语句

                else

                        当表达式不成立时要执行的操作或语句

                fi

                例:

                       

                        

                        因为num1大于num2结果为假所以输出else中的语句块

        3、多重if基本规则

                if [ 表达式1 ]

                then        

                        当表达式1成立时要执行的操作及语句

                elif [ 表达式2 ]

                        当表达式2成立时要执行的操作或语句

                elif [ 表达式3 ]

                        当表达式3成立时要执行的操作或语句

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

                else

                        当以上表达式都不成立时执行的语句

                fi

                例:

                以游戏段位为例,积分排行           

                #!/bin/bash

                read -p "请输入你的积分:" score

                if [ $score -ge 10000 ]
                then
                        echo "王者"
                elif [ $score -ge 7000 ]
                then
                        echo "星耀"
                elif [ $score -ge 5000 ]
                then
                        echo "钻石"
                elif [ $score -ge 3000 ]
                then
                        echo "铂金"
                elif [ $score -ge 1000 ]
                then
                        echo "黄金"
                else

                        echo "青铜"
                fi

                

        4、嵌套if基本规则

                if [ 表达式1 ]

                then

                        表达式1成立时执行

                        if [ 表达式2 ]

                        then

                                表达式1成立,表达式2成立时执行的语句及操作

                        else

                                表达式1成立,表达式2不成立时执行的语句及操作

                        fi

                else

                        表达式1不成立时执行的语句及操作

                fi

                例:以考试成绩为例

                

                

                嵌套可以有多层,外层是内层执行的条件

六、循环语句

        基本规则

                while ((表达式))

                do

                        满足表达式执行的语句或操作

                done

        例:循环输入学生成绩计算总分和平均值

                

#!/bin/bash

read -p "请输入班级人数:" num

i=1
total=0
while(($i<=num))
do
        read -p  "请输入第${i}个学生的成绩:" score
        total=$((total+score))
        let i++
done
echo "学生的总成绩为"${total}
echo "班级平均分为"$((total/num))

                注:while循环必须有出口,用let来循环给i赋值,每循环一次i的值增加1   

          跳出和跳过循环:

                break:跳出当前所在的循环,执行后边的语句

                continue:跳过本次循环continue后边的语句,到循环开始时重新执行(不建议使用,容易造成死循环) 

        利用while循环来读取和写入文件:

                a、读取文件

                        按行读取demo.txt中的文本数据,并输出

#!/bin/bash

while read line
do
        echo $line
done < demo.txt

  

                b、模拟实现linux中mv命令

                        在shell中$0代表当前文件,$1代表第一个参数,$2代表第二个参数,以下代码先判断有没有第二个参数,如果没有输入则参数无效,输入后防止文件名相同先删除文件,在创建新文件,然后循环覆盖写入文件,最后删除当前文件。

#!/bin/bash

if [ $2 ]
then
        rm -rf $2
        touch $2
        while read line
        do
                echo $line >> $2
        done < $1
else
        echo "参数无效"
fi

rm -rf $1

                先运行shell脚本,在后边直接写参数,第一个参数是源文件,第二个参数是移动后的文件(参数也可写成路径)

七、for循环结构

        基本规则:

                for((初始值;条件;运算语句))

                do

                        程序段

                done

        初始值可在for循环前定义

        条件和运算语句可在程序段内进行定义

        注:for((;;))如果全定义完成,可用这种方式写for语句(不建议,容易造成死循环)

        例:利用for循环完成99乘法          

#!/bin/bash

for ((i=1;i<=9;i++))
do
        for ((j=1;j<=i;j++))
        do
                echo -ne "${i}*${j}=$((i*j))\t"
        done
        echo
done

 

                根据上述代码完成99乘法表,-ne代表不换行且转换转义字符,\t转义字符制表符,主要用于对齐,空输echo代表换行。

        for in是对数据集的简单处理

                基本规则:

                        for 变量 in 数据集

                        do

                                程序段

                        done

                例:  遍历数据集

#!/bin/bash

score=(90 87 89 99 98 96 95 85 92)
for i in ${score[@]}
do
        echo ${i}
done

 

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值