• Linux之shell篇


    shell是用户与系统交互的界面,这是基本方式之一。标准的shell为bash。

    shell的操作:

    1. 显示所有使用过的命令:history。
    2. 执行最近执行过的一条指令:!!。首先会给出执行的是哪一条指令,然后就是运行效果。
    3. 执行history中的,第n条指令:!n。
    4. 执行history中,以value字符串开头的命令:!value。
    5. 打印出history中,最后一条指令:!!:p。
    6. 获得上条指令的最后一个参数:!$。例如先执行cat first.c,用!$就可获得first.c,所以就可以直接使用,像这样ls !$。

    元字符:预先定义好的、具有特殊意义的字符——shell会先找到这些元字符,并把它特殊化,完成之后再执行。

    常用的元字符:

    通配符:*匹配任意字符串、?匹配单个任意字符、[123]匹配方括号里面任意一个字符。

    命令替换:`command`=$(command):将字符串转换成命令来执行。

    命令组合执行:用;和(),例如date;who和(date;who)。

    条件执行,命令序列:用||和&&,例如date||who,||的作用是前一个命令失败,才会执行下一个命令,所以这条命令只执行了date;date&&who,&&的作用是前一个命令执行成功,才会执行下一个命令,所以date和who都执行了。

    因为shell默认会把变量当作字符串,所以要引用变量的值$:例如在终端,先a=10,然后用$a就可以获得变量a的值,所以echo $a,会打印出10。所有变量都要这样使用。

    shell的输入输出:即标准设备文件。0为输入,1为输出。每个进程都会打开这三个文件。

    输入、输出重定向:>将标准输出重定向到指定文件,>>标准输出追加到文件;<标准输入重定向到文件,<<标准输入追加到文件。(追加不会导致重定向)

    重定向的举例:

    输入的重定向:首先我们可以先向一个测试文件写入一些测试文字,然后在终端输入命令:cat < 测试文件,就可以将之前的测试文字,打印在终端了。

    输出的:例如who > test.c。

    追加暂时就不管了。

    管道(特殊的重定向):前一个命令的输出,作为下一个命令的输入(输入就是说,如果这个命令还没有写完,所以需要继续输入,那么就将管道的另一端作为这个输入)。如,who | wc -l统计用户数。

    shell的编程:

    脚本:存储一系列等待执行的命令。可以用脚本执行大量但是又重复的工作。

    特点:shell是解释语言,无需编译,但执行速度慢。支持正则。建立脚本后,要运行脚本,有两种方式:1、更改脚本权限为可执行,./脚本。2、强制运行:. 脚本,或者这样写:source 脚本。

    shell预定义的环境变量,下面给出常用变量和其值:HOME(用户主目录,就是桌面上那个XXX' Home)、PATH(shell中命令的位置,就是各个环境变量的集合,用:分隔)、USER(当前终端的用户)。而查看所有的环境变量,就用env或者set。

    自定义环境变量:export 变量名。引用时,不要加上$符号,因为此时不需要的是变量的值,而是变量本身。

    预定义变量:

    引用位置参数:$1—$9。位置参数个数:$#。获得所有位置参数:$@或者$*。shift:所有参数向左移(左移实际上是将左边第一个参数销毁,而且$#也会-1)。产生一个随机数:$RANDOM。

    获得上一个命令或函数执行后,的返回值$?:

    test()
    {
        return 1
    }
    
    test
    echo $?

    脚本中,局部变量创建:变量名=值;清除局部变量:unset 变量名。查看局部变量:

    表达式的写法:((表达式)),只有这样写,才认为是表达式。

    使用表达式:r=`expr 表达式`;r=$((表达式));r=$[表达式],还有一种高级的,let r=表达式。

    if语句:

    if 条件测试
      then
      条件为真时的命令串
      else
      条件为假时的命令串
    fi
    
    //例如
    answer=10
    read answer  //将标准输入保存到answer
    if	(($answer==0))
    then
    	echo success
    else
    	echo fail
    fi
    

    case_in语句(类似于switch case):

    #!/bin/bash
    echo Enter A,B,C
    read  letter
    case $letter in
    A|a) echo you entered A;
    ;;
    B|b) echo you entered B;
    ;;
    C|c) echo you entered C
    ;;
    *) echo not A,B,C
    esac

    for循环(只有for_in):

    //例如
    for i in 0 1 2 3 4 5 6 7 8 9
    do
    	echo  $i
    done
    

    while循环:由for循环,可以看出do和done之间是,循环体;再结合if,就可以写出while。还有一种until,写法和while一样,区别在于while是直到条件不满足,才停止循环;而until相反,直到条件满足,才停止循环。

    函数(如果是extern 函数,则说明是全局函数,即可以被子shell使用):

    test()
    {
    	false
    	return 100	//如果不写返回值(像这样:return) , 那么返回最近一次命令或函数的返回值 , 而且返回值在[0 , 255]之内,超过则"循环";返回值是不能通过赋值获得的,只能用$?
    }
    test  //在这里写函数的参数列表
    echo $?
    

    函数共享:

    将函数定义在一个单独的文件中,然后在使用该函数的脚本的开头用". 函数文件名"和"source 函数文件名"来读取文件,然后就可以使用函数了。

  • 相关阅读:
    一个php soap的错误记录
    Android 开发有哪些新技术出现?
    每个PHP开发者都应该看的书
    30 个 PHP 的 Excel 处理类
    PHP Session可能会引起并发问题
    PHP代码优化技巧大盘点
    分析和解析PHP代码的7大工具
    关于 PHP 7 你必须知道的五件事
    PHP也20岁了
    PHP高级特性二之文件处理
  • 原文地址:https://www.cnblogs.com/quanxi/p/6251877.html
Copyright © 2020-2023  润新知