• shell学习第二弹-进阶


    1.linux系统中配置文件执行顺序

      1)用户登录系统,首页调用/etc/profile文件初始化所有bash用户的默认特征

          2)然后shell依次查找~/.bash_profile,~/.bash_login,~/.profile,并执行它找到的首个文件中的命令;这些配置可以覆盖掉

        上述中配置文件的内容

      3)  通常可以在上述配置文件中添加一些用户配置,比如环境变量,定义一些函数,以及为一些常用命令重命名,非常方便

    2.在当前shell中使用运行初始化文件

      .号在bash下可以使配置文件快速生效。

        eg:. ~/.bash_profile

         source 命令通用

        eg:source ~/.bash_profile,source /etc/profile

    3.符号命令

      3.1. $()命令

            命令替换,可以使用该命令将一个命令的执行结果赋给一个变量

        eg:

           #!/bin/bash

         #统计当前目录下有多少个文件

           count=$(ls | wc -l)

           echo "$count $count"

      3.2.(())

            算术命令,()中要求包含=号

         eg:

          #!/bin/bash

          n=2

          m=3

          ((l=$m+$n)) #结果是5

          p=$m+$n #结果是2+3

          p=(($m+$n))#报异常

      3.3.$(())

        类似(())命令,但是要求()中不包含=号

          #!/bin/bash

          n=2

          m=3

          l=$(($m+$n)) #结果是5

      3.4.[]

        与test功能一样

    4.重定向标准输出

      4.1.文件描述符

        文件描述符是程序发送输出和接收输入的地方。当运行一个程序的时候,会打开3个文件描述符。分别是:0(标准输入),1(标准输出),2(标准错误输出)

        重定向输出符号>是1>的简写;类似的重定向输入符号<是0<的简写

      4.2.复制文件描述符

        &加上文件描述符

        locktty > out 2> &1  #标准输出和标准错误输出都重定向到out文件

    5.命令分隔和分组

      5.1.使用;分隔命令

        $ x;y;z;

      5.2.使用继续命令

        当输入一个比较长到的命令时,光标已经达到屏幕右端,可以输入一个换行

               $ grep aaaaa | cut -d : -f 3 | cut -d ; -f

        $ | awk '{print $1}'

      5.3.|和&符号功能

        |管道符号,改变命令的输入和输出;

        $ grep error out.log | cut -d ; -f 3

        &使程序或者命令在后台执行,使用户可以继续进行当前的工作

        $ cal.sh &

    6.作业控制

      6.1. jobs列出作业

      6.2. fg将作业移到前台执行

         $ fg n #n是作业编号

      6.3. bg将作业移到后台执行

         将某个作业移到后台执行,必须先按下CTRL+Z键将作业挂起。然后再使用bg命令将作业在后台执行

        

    7.操作目录栈

      目录栈是用栈的形式来存放目录(FILO)

      7.1. dirs显示目录栈

      7.2. pushd命令使用

        将目录压栈,并且使当前目录切换到要入栈的目录

        $ pushd /home/my

        ~ /home/my

        $ pwd  #显示/home/my目录

           输入pushd命令,可使当前路径在栈顶的两个目录之间进行切换

        pushd +n #n是要切换到的目录相对于栈顶位置的偏移(栈顶位置是0)

        pushd +3 #切换到距离栈顶3个位置的目录

      7.3. popd命令使用

         使目录弹出栈,不在栈中保存。用法类似于pushd

     8.参数和变量

      8.1.变量分类

        8.1.1 用户变量

            $ name=minmin

            $ echo $name #显示minmin

           使用unset删除用户变量

            $ unset name

        8.1.2 关键字变量即系统变量

           HOME:用户主目录

           ~:用户主目录

           PATH:shell查找程序执行的路径

           MAIL:保存邮件的地方

           IFS:分隔输入字段

              指定了在命令行中用来分隔参数的字符,其默认值为空格,制表符和换行符。但无论IFS的值是什么,用户总是可以使用空格符和制表符来分隔参数

              当为IFS指派字符值得时候,这些字符值也可以作为分隔字段,但是只有在进行展开的时候才可以这样

              eg:

           PS1:用户主提示符

              

             u 当前用户名

                   h 主机名,不包括域名

              H 主机名,包括域名

              w 工作目录的路径名

              W 工作目录的基名

                !   当前事件编号

              d  按照工作日/月/日期格式显示的日期

              @  按照12小时制,AM/PM的格式显示当前时间 

              T   按照12小时制,HH:MM:SS的格式显示当前时间

              A   按照24小时制,HH:MM的格式显示当前时间

                 按照24小时制,HH:MM:SS的格式显示当前时间

                         PS2:用户次提示符

              

            PS3:菜单提示符

              PS3保存了用于select控制结构的菜单提示符

            PS4:调试提示符

              bash -x 开启调试模式

                                PS4保存了程序调试时提示符

            

        8.1.3. 位置参数跟变量

           有一组参数的名字看起来不像变量,其中大多数参数的名字都是由一个字符组成,比如1,?,#,并且像其他变量一样,使用美元符号进行访问$1,$?,$#。

           详细内容在第三弹中展开

      8.2. 变量属性

        8.2.1. readonly使变量只读

           $ readonly name=minmin

           $ name=lily

           bash: name : readonly variable

                当不带任何参数使用readonly命令时,会显示所有只读变量列表

      8.3. declare和typeset:为变量赋予属性

        这两个命令是同一个命令的两个名字,可用设置shell变量的属性和值,属性列表如下

        -a   声明一个数组变量(array)

        -f   声明一个函数变量(function)

        -i   声明一个整形变量(integer)

        -r  声明一个只读变量(readonly)

        -x  声明一个全局变量(export)

    9.命令历史机制,这里只介绍history命令,fc命令不在此介绍

               9.1. 首先介绍三个系统变量

               HISTSIZE 会话期间保存的历史命令的条数

           即在用户登录之后,保存用户最近执行命令条数。默认值为500

        HISTFILESIZE 会话之间保存的历史命令的条数

           即在用户注销会话之后,再次登录会话时,保存的上次登录时最近执行命令的条数。默认值为500

        HISTFILE 历史文件的位置

               执行history命令时显示HISTSIZE条命令

              9.2. 常用快捷键

          !!执行前一次的命令

          !#执行当前命令

          !n 执行历史编号为n的命令

          !-n往前第n条命令

          !string执行最近以string开头的命令

          !?string[?]包含string的最近命令行,最后的?是可选的

          !{event} event为一个事件标志符;花括号将event与左右的文本分隔开,比如!{-3}3表示后面紧跟着3的第三个最近执行的命令

     10.命令执行顺序

        10.1 &&

          command1 && command2 只有当command1执行成功的时候(即命令结果返回1)才会执行command2

        10.2 ||

          command2 || command2 只有当command1执行失败的时候(即命令结果返回0)才会执行command2

         10.3 ()

          如果想执行多个命令,则需要使用命令分隔符对命令进行分割,然后用括号括起来

          (command1;command2;command3)

    若言琴上有琴声,放在匣中何不鸣; 若言声在指头上,何不于君指上听。
  • 相关阅读:
    UVA657 The die is cast(DFS、BFS)
    三分
    【洛谷P6105】iepsmCmq
    【CF613D】Kingdom and its Cities
    【洛谷P4294】游览计划
    【洛谷P3500】TESIntelligence Test
    【洛谷P6189】[NOI Online 入门组] 跑步
    【洛谷P2973】Driving Out the Piggies
    【洛谷P3164】和谐矩阵
    【洛谷P4161】游戏
  • 原文地址:https://www.cnblogs.com/xkms/p/5079245.html
Copyright © 2020-2023  润新知