zoukankan      html  css  js  c++  java
  • Linux——shell简单学习(一)

    首先来一个小程序,来查看所在目录,以及该目录下的文件

    #!/bin/sh                             # “#!”指定用sh执行shell脚本
    #this is to show workstation     # “#” 表示注释
    echo "We are currently in the following directory"  # echo 表示输出
    /bin/pwd   #输出用户所在目录
    echo          # 换行
    echo "This directory contains the following files"
    /bin/ls       #列出该目下的文件
    

      

    1. #!指定执行脚本的shell

    2. #注释行

    3. 命令和控制结构

    创建shell程序的步骤:

    第一步:创建一个包含命令和控制结构的文件。

    第二步:修改这个文件的权限使它可以执行。使用chmod   u+x

    第三步:执行   ./example

    (也可以使用“sh example”执行)

    Shell变量:

      变量:是shell传递数据的一种方法,用来代表每个取值的符号名。

      Shell有两类变量:临时变量和永久变量。

        临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量。永久变量是环境变量,其值不随shell脚本的执行结束而消失。

    用户自定义变量:用户定义的变量由字母或下划线开头,由字母、数字或下划线序列组成,并且大小写字母意义不同。变量名长度没有限制。在使用变量值时,要在变量名前加上前缀“$”。

    设置和使用变量:

      设置变量:习惯上用大写字母来命名变量。变量名只能以字母表中的字符开头,不能用数字。变量赋值:赋值号“=”两边应没有空格(这里要注意)。定义时赋值,如NUM=1

        将一个命令的执行结果赋给变量,如:TIME=`date`

       将一个变量赋给另一个变量,如:A =$B

       使用echo命令查看变量值。例如:echo  $A

       列出所有的变量: set

         包含多个字的变量:$NAME=“Mike Ron” 或 $NAME=‘Mike  Ron’   注意单引号与双引号的区别:

             例: 我们定义了变量a=111

        echo 'a = $a'  输出为a = $a

               echo "a = $a"  输出为a = 111

       # unset NAME  删除变量

    位置变量和特殊变量:

      Shell解释执行用户命令时,将命令行的第一个部分作为命令名,其它部分作为参数。由出现在命令行上的位置确定的参数称为位置参数。

      ls -l file1 file2 file3

      $0 这个程序的文件名 ls -l

      $n 这个程序的第n个参数值,n=1-9

      特殊变量:

        $* 这个程序的所有参数

        $# 这个程序的参数个数

        $$ 这个程序的PID

        $! 执行上一个后台命令的PID

        $? 执行上一个命令的返回值、

    在讲执行计划的时候我们讲到过系统周期性计划,然后进行系统的备份。 我们只要先编辑crontab -e 填入我们的计划,然后再将写好的脚本的绝对路径写在最后一个选项上即可。 

    我们在这里就给出shell脚本的书写, 本人已经验证时对的。这里没写邮件通知,只用用了write

    1:首先编写crontab -e

    46 19 * * * /home/helen/sysinfo.sh
    

    2:在/home/helen/下创建sysinfo.sh shell脚本

     

    #!/bin/sh    
    #auto mail for system
    
    /bin/date +%F >> /tmp/sysinfo      #记录时间
    echo "disk info : "  >> /tmp/sysinfo    
    /bin/df -h  >> /tmp/sysinfo  #将硬件信息写入
    echo >> /tmp/sysinfo
    echo >> "online user" >> /tmp/sysinfo
    /usr/bin/who | /bin/grep -v root >> /tmp/sysinfo   #将在线用户写入
    echo >> /tmp/sysinfo
    echo "memory info" >> /tmp/sysinfo  
    /usr/bin/free -m >> /tmp/sysinfo     #将内存信息写入
    echo >> /tmp/sysinfo
    
    #write root
    /usr/bin/write root < /tmp/sysinfo   //通知root
    

      

    read命令:从键盘读入数据,赋给变量  (相当于scanf 、 cin  echo相当于 print , cout)

      如:read  USERNAME

    expr 命令:

      expr命令:对整数型变量进行算术运算

      例如:

        expr 3 + 5

        expr $var1 - 5

        expr  $var1 / $var2

        expr  $var3 * 10     #乘法比较特别

           expr `expr 5 + 7`/$var4

        var4=` expr  $var1 / $var2 `

    变量测试语句:

      变量测试语句:用于测试变量是否相等、 是否为空、文件类型等。

       test    测试条件   测试范围:整数、字符串、文件

    变量测试语句

      字符串测试:

      test  str1=str2  测试字符串是否相等

      test  str1!=str2    测试字符串是否不相等

      test  str1      测试字符串是否不为空

      test  -n str1   测试字符串是否不为空

       test  -z  str1        测试字符串是否为空

      整数测试:

      test   int1 -eq  int2  测试整数是否相等

        test   int1 -ge  int2  测试int1是否>=int2

        test   int1 -gt  int2  测试int1是否>int2

      test   int1 -le  int2  测试int1是否<=int2

      test   int1 -lt  int2  测试int1是否<int2

      test   int1 -ne  int2  测试整数是否不相等

      文件测试:

      test -d file  指定文件是否目录

      test -f file  指定文件是否常规文件

      test -x file  指定文件是否可执行

      test -r file  指定文件是否可读

      test -w file  指定文件是否可写

      test -a file  指定文件是否存在

      test -s file  文件的大小是否非0

    变量测试语句:

      变量测试语句一般不单独使用,一般做为if语句的测试条件,如:

      if   test  -d  $1  then

      …

      fi

      变量测试语句可用[]进行简化,如 test  -d  $1 等价于  [ -d $1 ]  注意[] 内两边必须有空格

      例子:

      

    #!/bin/sh
    echo "输入要比较的两个数"
    read a b
    echo "您要比较的两个数为 $a $b"
    if [ $a -le $b ];then
             echo "最小值为 $a"
            exit 0
    else
            echo "最小值为 $b"
            exit 0
    fi
    

      

    流控制语句:

      流控制语句:用于控制shell程序的流程

      exit语句:退出程序执行,并返回一个返回码,返回码为0表示正常退出,非0表示非正常退出。  (相当于return) 例如:exit  0

      if …then …fi语句,例如:

      

    #!/bin/sh
    
    if  [ -x  /etc/rc.d/init.d/httpd ]     #判断一个文件是否可执行
    
    then
    
    /etc/rc.d/init.d/httpd restart
    
    fi
    

      

    if   条件1   then
    
    命令1
    
    elif   条件2   then
    
    命令2
    
    else
    
    命令3
    
    fi
    

      

    多个条件的联合:

    -a:逻辑与,仅当两个条件都成立时,结果为真。

     -o:逻辑或,两个条件只要有一个成立,结果为真。

    echo "please input a file name:"
    read file_name
    if [ -d $file_name ]
    then
    echo "$file_name is a directory"
    elif [ -f $file_name ]
    then
        echo "$file_name is a common file"
    elif [ -c $file_name -o -b $file_name ]
    then
    echo "$file_name is a device file“
    else
    echo "$file_name is an unknown file"
    fi
    

     

  • 相关阅读:
    机器学习的分类与主要算法对比
    关于在JSP页面中为什么一定要用${pageContext.request.contextPath}来获取项目路径,而不能用${request.contextPath}?
    Spring Boot静态资源处理
    Tomcat关闭后,重新启动,session中保存的对象为什么还存在解决方法
    Tomcat 7源码学习笔记 -9 tomcat重启后session仍然保留
    mysql-sql语句中变量的使用
    js检测对象中是否存在某个属性
    mysql :=和=的区别
    sql面试题(学生表_课程表_成绩表_教师表)
    ddd
  • 原文地址:https://www.cnblogs.com/E-star/p/3416029.html
Copyright © 2011-2022 走看看