zoukankan      html  css  js  c++  java
  • Shell学习心得

    Shell脚本,就是利用Shell的解释命令,把多步操作保存起来,相当于一个小程序,在需要的时候执行.

    Shell能做什么

    将一些复杂的命令简单化

    可以脚本自动实现一个工程中自动更换最新的库

    自动打包、编译、发布等功能

    定时清理磁盘中空文件夹

    生成指定长度或者指定范围的随机数

    在Shell定义变量时,变量名不加美元符号,

    如:

    your_name="runoob.com"

    变量名的命名须遵循如下规则:

    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

    运算符说明举例
    + 加法 `expr $a + $b` 结果为 30。
    - 减法 `expr $a - $b` 结果为 -10。
    * 乘法 `expr $a * $b` 结果为  200。
    / 除法 `expr $b / $a` 结果为 2。
    % 取余 `expr $b % $a` 结果为 0。
    = 赋值 a=$b 将把变量 b 的值赋给 a。
    == 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
    != 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

    注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

    if else-if else 语法格式:

    if condition1
    then
        command1
    elif condition2 
    then 
        command2
    else
        commandN
    fi

    for循环一般格式为:

    for var in item1 item2 ... itemN
    do
        command1
        command2
        ...
        commandN
    done

    while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。

    其格式为:

    while condition
    do
        command
    done

    无限循环语法格式:

    while :
    do
        command
    done

    Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

    case语句格式如下:

    case 值 in
    模式1)
        command1
        command2
        ...
        commandN
        ;;
    模式2)
        command1
        command2
        ...
        commandN
        ;;
    esac

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

    shell中函数的定义格式如下:

    [ function ] funname [()]
    
    {
    
        action;
    
        [return int;]
    
    }

    说明:

    • 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
    • 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

      5个面试问题

    1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录。

    答案 : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd。

    现在,创建一个名为userstats.sh文件,将下面的代码添加到它。

    代码如下:
    #!/bin/bash
    echo "Hello, $LOGNAME"
    echo "Current date is `date`"
    echo "User is `who i am`"
    echo "Current directory `pwd`"

    给它添加执行权限,并且执行他。

    代码如下:

    # chmod 755 userstats.sh
    # ./userstats.sh
     

    样例输出

    代码如下:
    Hello, avi
    Current date is Sat Jun  7 13:05:29 IST 2014
    User is avi      pts/0        2014-06-07 11:59 (:0)
    Current directory /home/avi/Desktop
     

    2.写一个shell脚本,进行两个数字的相加,如果没有输入参数就输出错误信息和一行使用说明

    答案 : 下面是简单的shell脚本以及描述,如果没有命令行参数,它会抛出错误与如何使用脚本的说明。

    再创建一个名为twonumbers.sh文件和下面的内容添加到文件里。

    代码如下:
     
    #!/bin/bash
    # The Shebang
     
    if [ $# -ne 2 ]
    # If two Inputs are not received from Standard Input
     
    then
    # then execute the below statements
     
        echo "Usage - $0   x    y"
        # print on standard output, how-to use the script (Usage - ./1.sh   x    y )
     
        echo "        Where x and y are two nos for which I will print sum"
        # print on standard output, “Where x and y are two nos for which I will print sum ”
     
        exit 1
        # Leave shell in Error Stage and before the task was successfully carried out.
     
    fi
    # End of the if Statement.
     
        echo "Sum of $1 and $2 is `expr $1 + $2`"
        # If the above condition was false and user Entered two numbers as a command Line Argument,  
           it will show the sum of the entered numbers.
     

    给他添加可执行权限,并且执行。

    代码如下:
    # chmod 755 two-numbers.sh

    情形一: 未输入两个数字作为命令行参数运行脚本,你将得到下面的输出。

    样例输出

    代码如下:
    # ./two-numbers.sh
     
    Usage - ./two-numbers.sh   x    y
            Where x and y are two nos for which I will print sum

    情形二: 当数字存在时,你会得到如图所示的结果。

    代码如下:

    $ ./two-numbers.sh 4 5
     
    Sum of 4 and 5 is 9

    因此,上述shell脚本满足了问题的要求。

    3.你需要打印一个给定的数字的反序,如输入10572,输出27501,如果没有输入数据,应该抛出错误和使用脚本说明。在此之前,告诉我你需要在这里使用的算法。

    算法

    1.输入的数字为n
    2.赋值 rev=0, sd=0 (反向和单个数字设置为0)
    3.n % 10, 将得到最左边的数字
    4.反向数字可以用这个方法生成 rev * 10 + sd
    5.对输入数字进行右位移操作(除以10)
    6.如果n > 0, 进入第三步,否则进行第七步
    7.输出rev

    现在,创建一个名为`numbers.sh`文件,并添加以下代码。

    代码如下:
     
    #!/bin/bash
    if [ $# -ne 1 ]
    then
        echo "Usage: $0   number"
        echo "       I will find reverse of given number"
        echo "       For eg. $0 0123, I will print 3210"
        exit 1
    fi
     
    n=$1
    rev=0
    sd=0
     
    while [ $n -gt 0 ]
    do
        sd=`expr $n % 10`
        rev=`expr $rev * 10  + $sd`
        n=`expr $n / 10`
    done
        echo  "Reverse number is $rev"
     

    授予对文件的执行权限,并运行如下所示的脚本。

    代码如下:
    # chmod 755 numbers.h
     

    情形一: 当输入不包含命令行参数,你将得到下面的输出。

    样例输出

    代码如下:
    ./numbers.sh
     
    Usage: ./numbers.sh  number
           I will find reverse of given number
           For eg. ./2.sh 123, I will print 321
     

    情形二: 正常输入

    代码如下:
    $ ./numbers.sh 10572
     
    Reverse number is 27501

    4. 你应该直接用终端,而不是依靠任何shell脚本来进行实数计算。你会怎么做(比如实数7.56+2.453)?
    答案 : 我们需要用如下所述的特殊方式使用bc命令。将7.56+2.453作为输入通过管道进入bc中。

    代码如下:

    $ echo 7.56 + 2.453 | bc
     
    10.013

    5. 你需要给出圆周率的值,精度为小数点后100位,什么是最简单的方法。

    答案 : 找圆周率的值最简单的方法,我们只是需要发出以下命令。

    代码如下:

    # pi 100
     
    3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067

    很明显!安装我们必须有包pi。只用一个apt或yum命令,就能获得所需的软件包,同时用最简单方法来实现这个需求。

  • 相关阅读:
    如何在Ubuntu Server 18.04上安装Microsoft的Procmon
    如何在Ubuntu 20.04上安装Wine 5.0
    如何在Kali Linux 2020中启用SSH服务
    如何在Ubuntu 20.04 LTS Focal Fossa上安装Apache Groovy
    如何使用命令在Ubuntu 20.04 Linux上安装Vmware Tools
    在Ubuntu 20.04 LTS Focal Fossa上安装Zabbix Agent
    hdu 2089 不要62
    hdu 2093 成绩排名
    hdu 2104 hide handkerchief
    leetcode147对链表进行插入排序
  • 原文地址:https://www.cnblogs.com/duoshuihui/p/12321715.html
Copyright © 2011-2022 走看看