• 系统服务及shell编程


    防火墙(ufw)

    • 说明:简单版本的防火墙,底层依赖于iptables。

    • 安装:sudo apt-get install ufw

    • 查看状态:sudo ufw status

    • 开启/关闭:sudo ufw enable|disable

    • 默认允许/禁止:sudo ufw default allow|deny

    • 允许/禁止:sudo ufw allow|deny 服务|port,如:sudo ufw deny ssh

    • 移除规则:sudo ufw delete deny ssh

    管道及xargs

    • |:管道,将前面命令的输出作为后面命令的输入参数,如:ls /bin | grep '^m'

    • xargs:有些命令无法接收管道参数,可以通过xargs解决,如:find -name 1.sh | xargs rm -rf

    重定向

    • 三个数据流:标准输入(stdin)、标准输出(stdout)、标准错误(stderr)

    • 在linux,启动任意的进程,系统会自动创建上面三个数据流,其实就是三个文件

    • 三个文件的描述符分别是:0、1、2,都指向了终端

    • 重定向就是改变原来的表现位置。

    • 示例演示:

        输出重定向:
      ls > 1.txt # 将ls的输出结果保存到1.txt文件中,会新建文件1.txt,若文件存在则会清空
      ls >> 1.txt # 将ls的输出结果追加到1.txt文件中,文件不存在也会创建
      错误重定向:
      ls /xxx 2> 2.txt # 将错误信息保存到2.txt
      同时重定向输出和错误:
      ls /xxx /home &> 3.txt # 同时将错误和输出保存到3.txt文件中

    shell简介

    • 什么是shell编程?

      • 将终端下编写的命令等保存到文件中,就称为shell编程。

    • shell类型?

      • ash、bash、csh、ksh

      • 查看系统shell解析器:echo $SHELL

      • 当前系统可以shell解析器:/etc/shells文件

    • shell脚本的执行

      • 指定shell解析器执行指定脚本:bash hello.sh,不需要添加可执行权限

      • 将shell脚本作为可执行文件执行,必须添加可执行权限

        • 添加可执行权限:sudo chmod +x world.sh

        • 在脚本开头指定shell解析器:#! /bin/bash,其他位置的#表示注释

        • 执行脚本:

          • 在当前目录:./world.sh

          • 不在当前目录:/home/jerry/shell/world.sh

    shell变量

    • 变量定义:name='dahua','='两边不能有空格

    • 打印变量:echo $name 或 echo ${name}

    • 销毁变量:unset name,之后就不能再使用

    • 声明常量:readonly name='dahua'

    • 使用说明:'='两边不能有空格,只读变量不能修改

    变量分类

    • 本地变量:只适用于当前shell的变量

    • 环境变量:适用于整个系统,通常都是纯大写的

      • 查看系统环境变量:env

      • 查看指定环境变量:echo $PATH

      • 若想在任意位置都可执行指定程序,可以将程序所在的路径添加到环境变量PATH。

      • 修改:

        • 单次:export PATH=$PATH:/home/jerry/shell

        • 永久:

          • 系统:/etc/profile

          • 用户:~/.profile、~/.bashrc、~/.bash_profile

          • 把导出的语句添加到文件末尾即可

          • 使文件生效:重启终端 或 source ~/.bashrc

    • 位置变量:

      • $0:执行脚本的名字

      • $1 ~ $9:传递给脚本的参数

    • 特殊变量:

      • $#:传递给脚本的参数个数

      • $*:传递给脚本的所有参数

      • $?:上次命令的执行情况,0表示正确,其他表示错误

    字符串类型

    • 单引号:其中的字符都会原样输出,不会被解析

    • 双引号:可以放除了$、`、、"以外任意字符,其中的变量等会被解析

    • 反引号:将其中的内容作为命令执行,如:

        echo `date`
    • '':转义特定的字符,如:$、*、、?、|、`、^、&

    • 字符串长度:${#name}

    • 字符串提取:${name:2:3},从变量name中下表为2的地方提取3个字符

    数组类型

    • 定义:a=(1 2 3)

    • 成员访问:echo ${a[2]}

    • 个数统计:echo ${#a[@]}

    • 所有元素:echo ${a[*]}

    seq

    • 说明:生成指定范围的连续整数

    • 示例:seq 10,生成1~10的连续整数,seq 2 10,生成2~10的连续整数

    expr

    • 说明:运算一个表达式

    • 示例:

        expr 2 + 3              结果为5
      echo `expr 3 + 5` 结果会打印8
      expr 3 * 5 结果为15,*需要转义

    各种运算

    • test命令:成功为真,失败为假。

        #!/bin/bash

      if test 1 -lt 2; then
      echo 'ok'
      fi

      if [ 1 -lt 2 ]; then
      echo 'okok'
      fi
    • 数值比较运算

      • -lt:小于

      • -le:小于等于

      • -gt:大于

      • -ge:大于等于

      • -eq:等于

      • -ne:不等于

    • 字符串测试

      • =:相等

      • !=:不相等

      • -z:字符串的长度是否为0

      • -n:字符串的长度是否不为0

    • 文件判断

      • -f:普通文件

      • -d:目录文件

      • -c:字符设备文件

      • -b:块设备文件

      • -w:是否可写

      • -x:是否可执行

      • -s:文件存在,并且至少有一个字符

    • 逻辑运算

      • -a:逻辑与(and),也可以使用&&来代替

      • -o:逻辑或(or),也可以使用||来代替

      • !:逻辑非

      • 示例:

        #! /bin/bash

      if [ 1 -lt 3 -a 2 -lt 3 ]; then
      echo 'ok'
      fi

      if [ 1 -lt 3 ] && [ 2 -lt 3 ]; then
      echo 'ok'
      fi

      if [ ! 1 -gt 3 ]; then
      echo 'xxx'
      fi

    分支结构

    • if-elif-else:

        #! /bin/bash

      if [ 8 -lt 3 ]; then
      echo '8 < 3'
      elif [ 8 -lt 9 ]; then
      echo '8 < 9'
      else
      echo 'xxx'
      fi
    • case:

        #! /bin/bash

      read -p 'please input any charactor:' ch

      case $ch in
      [a-z])
      echo 'alpha'
      ;;
      [0-9])
      echo 'numberic'
      ;;
      *)
      echo 'others'
      ;;
      esac

    循环结构

    • for-in 及 for

        #! /bin/bash

      a=(1 2 3 4 5)
      # for x in a b c
      # for x in /etc/*
      # for x in `seq 1 10`
      for x in ${a[*]}
      do
      echo $x
      done

      for ((i=0;i<${#a[@]};i++))
      do
      echo ${a[$i]}
      done
    • while

        #! /bin/bash

      i=1
      sum=0

      while [ $i -le 100 ]
      do
      #((sum+=$i))
      #((i++))

      #let sum+=$i
      #let i++

      sum=$[$sum+$i]
      i=$[$i+1]

      done

      echo $sum
    • until:条件成立,循环停止

        #! /bin/bash

      i=1
      until [ $i -gt 10 ]
      do
      echo $i
      ((i++))
      done
    • break、continue自行学习

    函数使用

    •   demo(){
       echo 'for func'
      }
         
      demo

    arg(){ echo 2 echo # return 250 }

    arg abc def

    $?表示函数的返回值

    echo $?

      


     

  • 相关阅读:
    C++指针与引用类型的区别
    Linux介绍和基本操作
    CMD 命令
    C语言关键字
    错误: 在类中找不到 main 方法, 请将 main 方法定义为: &#160; &#160;public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application 。
    根据补码定义,由真值求补码。
    域名直接访问项目|Tomcat http 自动跳转Https
    Python扩展库NumPy快速入门
    项目慢查询性能分析
    Springboot 配置 https
  • 原文地址:https://www.cnblogs.com/542684416-qq/p/9897136.html
Copyright © 2020-2023  润新知