• Linux Shell编程


    在linux系统中,我们一般都是用C语言写服务端程序,但是一般我们不直接启动这个程序,而是通过一个shell脚本启动和关闭(需要设置一些环境变量和防止打开多个改程序,打开多个后需要找到pid才能关闭)

    那么shell是什么呢?

    说白了shell是操作系统提供给我们的一种语言,用来将用户的命令输送到内核中执行

    shell编程

    1首先我新建一个test2.sh,存放下面的一段shell代码

    2保存后,修改这个shell为可执行文件 chmod +x test2.sh

    #! /bin/sh
    #定义变量
    name=张三
    echo $name
    echo "参数:$*"
    echo "参数个数$#"

    输出结果:

    下面分别介绍字段的含义

    第一行一般默认第一行都是上面这段#! /bin/sh,通知系统用/bin/sh来执行下面的程序。

    以“#”开头的行代表注释

    echo代表输出后面一段话的到用户界面

    $name代表使用了name这个变量(定义shell变量在下面介绍)

    $* 代表所有的参数(我们在shell命令后面加了hello 和world两个参数)

    $#代表参数的个数

    有了初步的认识,我们就开始踏入shell编程吧!

    1shell变量

    定义shell变量:(注意等号左边右边不可以有空格)

    shellname=value

    使用shell变量

    $shellname


    2$数字

    代表第几个参数

    例如$1代表第一个参数,按照上面的代码就是hello

    还有下面的一些$符号的使用。

    可能会对$?有一点费解,例如我们在shell中调用了一个C语言程序mydemo,其中mydemo这个主函数会返回100(这里不写c代码了)

    #! /bin/sh
    ./mydemo
    echo $?

    shell输出值:100

    也可以是执行一段shell函数,获取该函数的返回值(最后讲函数说到)


    3shell中执行命令

    如果我们想在shell中执行一段命令,并将该命令的值存放到一个变量中,就要用到` `符号(在1数字旁边)

    #! /bin/sh
    result=`ls`
    echo result=$result

    ls命令显示当前文件夹下有哪些文件

    输出结果:result=test.sh ...


    4读取键盘

    我们在运行shell的时候,可能需要我们输入一些数据,除了带参数的方式我们还可以使用read进行读

    #! /bin/sh
    echo "please enter a"
    read a
    echo "please enter b"
    read b
    echo "a=$a,b=$b"

    输出结果:

    read命令读取一个输入行,直至遇到换行符。

    行尾的换行符在读入时将被转换成一个空字符

    如果read命令后有变量名,输入内容赋给该变量。

    如果read命令后未跟变量名,读入的行将被赋值给内置变量REPLY。


     shell也会像高级语言支持if,while等计算

    if语句(两种)

    (一)第一种if(用来判断条件是否正确)

    格式:(fi代表这个if结束)

    if (test condition) then
      commands
    else
      commands
    fi
    test是一个固定关键字,用来判断condition的描述是否正确
    #! /bin/sh
    if (test "start" =  "${1}" ) then
            echo "start"
    else
            echo "end"
    fi
    执行结果:

    (二)第二种if(用来判断文件或者文件夹是否存在)

    格式:

    if [ -option file]; then
      commands
    else
      commands
    fi

    代码:

    #! /bin/sh
    if [ -d "${1}" ]; then
            echo exist
    else
            echo notexist
    fi

    运行

    查看dir1文件夹是否存在,因为我创建了一个,所以是存在的。

    其中还有一些其他选项


    while循环

    代码格式:([右边和]左边都要有一个空格哦,done代表循环结束,当条件不成立时候循环结束)

    while [ expr ];
    do
      commands
    done

    代码demo(大家可以自己验证哈)

    #! /bin/sh
    tmp=0
    while [ "$tmp" != "5" ];
    do
            echo "curtmp=$tmp"
            tmp=$[ $tmp + 1 ]
    
    done

    case分支语句

    同样也支持像switch那样的分支选择语句的

    代码格式:(如果有一个pattern匹配到跟string内容一样,执行这里面的内容,否则执行最下面的*分支,;;两个分号代表退出case循环,跟C语言的break)

    case "string" in
    pattern_1)
      commands
    ;;
    pattern_2)
      commands
    ;;
    *)
      commands
    ;;
    esac

    for循环

    代码格式:(会遍历这个list数组,将当前值存放到varname变量中,后面的分号也是必不可少的哦

    for varname in list ;
    do
      commands
    done
    代码demo
    #! /bin/sh
    for name in $*;
    do
            echo "$name"
    done
    上面的代码会输出所有的参数。

    exit语句

    跟C语言的exit很类似,代表退出当前shell
    代码格式:(code代表退出码)
    exit code
    可以在一个Ashell中调用另一个Bshell,可以在Ashell通过$?得到Bshellexit退出吗

    函数

    shell同样也是支持函数的哈
    代码格式:(使用前必须先定义函数)
    function funcname
    {
      commands
    }
    代码demo:
    #! /bin/sh
    function fun1
    {
            echo "第一个参数:$1"
            echo "第二个参数: $2"
            return 100
    }
    fun1 3 4
    echo "函数返回值:$?"
    上面代码输出什么大家应该知道了。可以再验证一下

    总结demo

     最后写一个demo,代表打开某个进程(如果已经打开就不再重复打开)
     #! /bin/sh
    me=`whoami`
    PID=`ps -u $me |grep mydemo|awk {'print $1'}`
    if( test "$PID" = "" ) then
            `mydemo`
    fi
    PID的变量用来获取mydemo的pid值
    grep代表搜索mydemo这个进程
    awd标识输出这一行的第一列,也就是pid的值
    大家可以了解一下ps,grep,awk命令哈
  • 相关阅读:
    python struct使用
    pythonunittest(1)
    python os.path模块学习(转)
    pythonunittest(2)
    主机+虚拟机Ubuntu+开发板互相ping通
    wince 外部中断调用可安装ISR错误(data abort)
    wince firstboot.nb0 的大小的问题解决
    wince 串口索引超过10个解决方法
    wince uboot 启动 wince
    zigbee 天线的设计
  • 原文地址:https://www.cnblogs.com/nfcm/p/7743418.html
Copyright © 2020-2023  润新知