• Linux-shell编程


     什么是shell

    shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson的sh是第一种Unix Shell,Windows Explorer是一个典型的图形界面Shell。
    shell是一个在操作系统之上的软件,Linux登录后默认进入这个软件.
    shell是一个命令的解释器.
    shell拥有自己内建的命令集
    什么是bash
    bash是shell的扩展,并且完全兼容shell(类似vi与vim的关系)
    什么是shell script
    shell脚本(shell script),是一种为shell编写的脚本程序。业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell script是两个不同的概念。由于习惯的原因,简洁起见,本文出现的“shell编程”都是指shell脚本编程,不是指开发shell自身(如Windows Explorer扩展开发)。

    执行脚本

    运行Shell脚本有两种方法:

    作为可执行程序

    chmod +x test.sh
    ./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脚本的文件名,如:

    sh test.sh
    bash test.sh

    变量

    定义变量

    变量以字母或者下划线开头,后面接任意长度的字母、数字和下划线,如 var=linux
    如果变量的值中间有空格,需要用双引号引起来,如var="hello world"
    定义变量时,变量名不加美元符号($),如:

    your_name="qinjx"
    your_name='qinjx'
    your_name=qinjx

    注意!!!变量赋值时两边不能有空格!!!

    变量的引用

    变量的引用需要在前面加$符号 ,如:

    echo $var
    echo "$var"

    单引号与双引号的区别

    单引号里的变量不解析
    双引号里的变量会解析成对应的值

    name1="qinjx1"
    name4="hello $name1"        # 输出:hello qinjx1        (解析)
    name5='hello $name1'        # 输出:hello $name1        (不解析)

    特殊变量

    $n         代表第n个参数
    $*         代表所有参数
    $#         代表参数的个数
    $?         代表上一个命令的返回状态(0表示成功,非0不成功)

    命令替换

    命令替换有两种方式:

    echo $(id)
    echo `id`

    在执行命令的时候,会先将$()或者``里的命令先执行一遍

    命令替换和管道的区别

    命令替换是讲一个命令的输出作为另外一个命令的参数
    管道是将命令的输出作为下一个命令的标准输入

    算数运算和赋值

    赋值

    ((i=1+1))
    let j=2+2
    y=$(($i+$j))

    使用

    echo $i $j $y

    命令分隔符

    分号(;)是shell的命令分隔符, 让同一行的命令能够顺序执行。如echo 1 ;echo 2

    其他分隔符

    [command1] && [command2]    
    [command1] || [command2]

    &&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行
    ||则与&&相反。如果||左边的命令未执行成功,那么||右边的命令就会执行

    if语句

    if基本语法

    if [ 表达式 ];then [具体逻辑];fi
    if command;then [具体逻辑];fi

    表达式必须用[]括起来,另外[]里外都需要空格与周围隔开(例如: [ a == b ] ),否则会报错

    条件测试类型

    整数测试

    -eq 测试两个整数是否相等
    -ne 测试两个整数是否不等
    -gt 测试一个数是否大于另一个数
    -lt 测试一个数是否小于另一个数
    -ge 大于或等于
    -le 小于或等于

    字符串测试

    == 等于  
    != 不等
    >  大于
    <  小于
    -z string 测试指定字符是否为空,空着真,非空为假
    -n string 测试指定字符串是否为不空,空为假 非空为真

    文件测试

    (两边要有空格)

    -e file 测试文件是否存在
    -f file 测试文件是否为普通文件
    -d file 测试指定路径是否为目录
    -r file 测试文件对当前用户是否可读
    -w file 测试文件对当前用户是否可写
    -x file 测试文件对当前用户是都可执行

    组合测试

    -a: and
    -o: or
    !: 非

    for循环

    for arg in [list]
    do
        [command]
    done

    while循环

    while [command/condition]
    do
        [command]
    done

    函数

    定义函数

    function name(){
        [command]
    }

    调用

    name

    shell函数可以带function关键字,也可以不带
    shell函数内可以加return返回值,也可以不带,如果不带就以最后一条命令运行结果,作为返回值.

  • 相关阅读:
    HPC Linux
    Git安装使用
    Xshell和VirtualBox虚机CentOS7的连接
    Virtualbox中的Linux:未能加载虚拟光驱 VBoxsGuestAdditions.iso到虚拟电脑
    VirtualBox 主机与虚拟机互通
    在VirtualBox上安装CentOS7
    virtualbox 中的linux 共享文件
    【AT4434】[ARC103D] Distance Sums(构造)
    【洛谷3514】[POI2011] LIZ-Lollipop(构造)
    【LOJ6044】「雅礼集训 2017 Day8」共(prufer序列)
  • 原文地址:https://www.cnblogs.com/sunch/p/10013331.html
Copyright © 2020-2023  润新知