linux下的shell脚本编写

        下面我参考网上写的较好的文章,加上自己的一点理解修改。仅供看家参考。


        Shell是一种具备特殊功能的程序,它是结语使用者和UNIX/Linux操作系统核心程序(kernel)之间的一个接口。是为了屏蔽内核的复杂性,也为了保护内核以免用户误操作造成损害,在内核周围建立一个外壳(shell),用户想shell提出请求,shell解释并将请求传给内核。

        shell标准有 Bourne shell(sh),Korn shell(ksh),C shell(csh),Bourne Again Shell(bash)。

                        可以通过在终端输入:echo $SHELL 来查看当前shell。

        shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数,变量,数组和程序控制结构。任何在提示符中能键入的命令,都能放到一个可执行的shell程序中。

        本质上,shell脚本是命令行命令简单的组合到一个文件里面,shell基本上是一个命令解释器,类似于DOS下的command.com。接收用户命令,然后调用相应的应用程序。


        通过编写一个shell来介绍shell的特点

        shell文件的后缀名为.sh,如编写一个名为HelloShell的shell,其名称就是HelloShell.sh,一般我们使用vi或者vim来编写shell。

        #!/bin/sh                    ——shell文件第一行

        shell脚本是按行解释的,脚本的第一行总是已 #!/bin/sh开头,其中的sh表示使用的shell标准,目前新的版本中sh是指向bash也就是说在新版系统中,sh跟bash的脚本类型是一样。当然我们也可以替换成自己使用的shell类型。但你要确保在/bin/目录下有这个类型的执行文件。

        #HelloShell.sh

        #To show the enter name

        在shell中已#号开都的行为注释行,一般第二行显示shell文件名称,第三行简单解释下这个shell的作用,比如我们所写的shell是为了将用户输入的名称显示出来。

        echo -n "Enter Your Name:"                 ——系统执行到这一行后会在终端显示“Enter Your Name:”,然后停下来等待用户输入,用户可以输入一行数据,-n参数的意思是不输出末尾的换行符,也就是用户在这行的末尾输入数据,对应的参数是-e,换行输入数据。echo的其它参数可以通过 man echo来查看

        read NAME                     ——这行命令是读取保存用户输入的数据,并通过变量NAME来引用数据

        echo "Hello $NAME"              ——这行的效果就是在终端显示你输入的数据,通过$NAME来获取之前保存到NAME引用下的数据。

        编写完成后保存退出。之后可以通过给文件加执行权限直接运行脚本,也可以通过“sh 脚本名称”形式来运行脚本。权限添加如下:

                     chmod u+x HelloShell.sh

        shell脚本常见变量:

        shell中的变量一般用大写字母表示。使用echo命令获取单个变量值。

   设置只读变量:如果设置变量时,不想改变其值,在变量前加上readonly可以将其设置为只读。***给变量赋值的时候=左右不能有空格***

        name=value

        readonly name

    删除变量:unset name


  数组变量:        

        给元素赋值:list【index】=value

        给整个数组赋值变量:list=(value1 value2 value3 value4... valuen),元素之间用空格分离。

        为部分元素赋值:list=([0]=value1 [3]=value3... [n]=valuen)

        访问单个值:${list[index]}

        访问整个数组:${list[*]}

                                    ${list[@]},可以处理包含空格的数组元素

       删除数组元素与删除变量:

           unset list【index】 ,也可以用list【index】=后面赋值为空,变量赋值为空和删除是有区别的,区别只是在使用${variable+string}和${variable?string}形式才会出现。

           unset list删除整个数组,list=空只会清除第一个元素值

    常用的shell变量:

                         PWD,UID,SHLVL,REPLY,RANDOM,SECONDS,IFS,PATH,HOME



        位置变量:在shell中$0输出的是shell脚本的名称,$1~$9表示的是脚本参数

        特定变量:$#  ——  表示脚本的参数个数

                            $*  ——  传递到脚本的参数,与位置变量不同,参数选项可超过9个,使用echo $*,将输出所有参数

                            $$ ——  脚本运行时,当前进程的ID号,常用作临时变量的后缀

                            $!  ——  后台运行的(&)最后一个进程的ID号,这个没用过。

                            $@  ——  与$#相同,使用时加引号,并在引号中返回参数个数,这个也没用过

                            $-  ——  上一个命令的最后一个参数

                            $?  ——  最后命令退出状态,0表示没有错误,其它值表示错误类型

        逻辑操作符:

                            -a  —— 逻辑与(and) 如:判断文件file1可读并且文件file2可写是否成立,【 -r file1.c -a -w file2.c 】

                            -o  —— 逻辑或(or)

                            !  —— 逻辑否

        字符串测试:

                            =  ——两个字符串相等

                            !=  ——  两个字符串不相等

                            -z  —— 空串      如,判断HelloShello.sh文件是否为空:【 -z HelloShello.sh 】

                            -n  —— 非空串

        数值测试:

                            -eq=  ——  数值相等(equal to)如判断10是否等于12:【 “10” -eq “12” 】

                            -ne  ——  数值不相等(not equal to)

                            -gt  ——  第一个数大于第二个数(greater than)

                            -lt  ——  第一个数小于第二个数(less than)

                            -le  ——  第一个数等于第二个数

                            -ge  ——    第一个数大于等于第二个数

        控制结构:

               选择结构:

                           if语句:if then else提供条件测试,格式如:

               if 【 判断条件 】

                   then

                        命令语句1

                   elif 【 判断条件 】

              then

                        命令语句2

              else

                        命令语句3

              fi

                           case语句:匹配判断,格式如:

              case 值 in  ——  后面必须跟in

                   模式1)  ——  后面必须有右括号

                           命令语句1

                           ;;   ——  执行语句结束标志

                   模式2)

                           命令语句1

                           ;;

              esac

               循环结构:

                           for:循环处理列表内的信息,格式如:

              for 变量 in 列表

              do

                     命令语句

              done

                           until:判断条件在循环末尾,至少执行一次,格式如下:

              until 条件

              do

                     命令语句

              done

                           while:判断条件在循环头部,格式如下:

              while 条件

              do

                     命令语句2

              done

         函数相关的以后再说!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值