zoukankan      html  css  js  c++  java
  • 笔记2

    重定向和管道符:

    1.重定向
    程序 = 指令 + 数据
    命令 变量


    在程序中,数据如何输入?又如何输出?

    数据输入:键盘 -- 标准输入,并不是唯一输入方式
    --stdin
    echo "123456" | passwd --stdin "username"

    例如:功能添加用户 useradd.sh txt文本文档1000个用户
    ./useradd.sh a
    ./useradd.sh b
    ...

    ./useradd.sh < user.txt

    while line ; do
    循环体
    done < /etc/passwd

    数据输出:显示器 -- 标准输出,但并不是唯一输出方式
    ls /etc/ > a.txt

    fd文件标识符 0-9 -- 相当于给文件分类;
    0 1 2
    0 -- 标准输出
    1 -- 标准输入
    2 -- 错误输入输出(标准错误)

    常见重定向符号
    1.标准输出
    > 覆盖重定向,非常危险
    set -C //关闭覆盖重定向功能
    >| //强制重定向
    >> 追加重定向
    不覆盖
    2.标准输入
    < tr 替换文件内容
    tr set1 [set2] < file.txt
    << 将多行数据同时输入
    cat >>a.txt<<EOF
    >1
    >2
    >3
    >EOF
    3.错误输出
    2>
    扩展:不需要输出内容,只需要输出状态;
    ls /etc/ > /dev/null
    if [ $? -eq 0 ];then
    循环体
    if
    2>> &> &>> == 2&>1
    ls /etc/&> /dev/null


    2.管道 - tee

    command1 | command2 | command3 | ... ...
    前一个命令的执行结果交给后一个命令来执行
    【Linux思想:结合小功能实现大功能】
    free -m | grep "^Mem" | cut -d' ' -f19
    free -m | grep "^Mem" | awk '{print $3}'

    tee 一路输出,两路输出
    tee /tmp/tee.out
    如果没有文件,会创建,默认如果文件存在有内容,会覆盖;

    练习:
    将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中;
    head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out

    将登录至当前系统上用户信息汇总的后3位信息转换为大写后保存至/tmp/who.out文件中;
    who | tail -3 | cut -d' ' -f1 | [[:lower:]] [[:upper:]] | tee /tmp/who.out

    tail 查看文件尾部多少行
    3.文本处理工具 - wc,cut,sort,uniq


    shell脚本语言介绍
    优点:调用os(操作系统)的命令行,来实现所以功能;
    缺点:没有库调用(区分Python)

    shell脚本包括:1.*命令* 2.变量(全局变量,局部变量,本地变量,传参)3.逻辑关系

    shell的第一句话!!!
    #!/bin/bash --定义脚本解释器(普遍认为#为注释行,这里特殊)shebang
    #!/usr/bin/python

    /etc/shells --查看当前系统支持的shell程序
    echo $SHELL --查当前会话的shell程序
    /etc/passwd --制定了用户默认支持的shell程序(/sbin/nologin)

    shell的执行:
    1.bash命令来执行脚本
    -n 查看shell脚本的逻辑错误(注意:单词写错查不出)
    -x 逐行显示执行的脚本程序
    2.授权 chmod u+x filename.sh
    使用全路径执行脚本,即可

    3.变量
    环境变量
    局部变量 declare 命令 --定义变量类型
    本地变量 local在函数中使用

    变量类型:
    数值型:
    1.整形 int
    2.浮点型 float
    3.布尔型 0(True) 1(False)
    字符型:
    1.普通字符及字符串
    2.数组

    编程语言的分类:
    强类型语言:数值必须被定义,才能进行处理或运算
    弱类型语言:编程语言可以自动识别变量类型
    【*多态*一个数据具有多个属性,而最后使用的属性取决于和它进行运算的数据】

    传参
    $? --上一条命令的执行状态 0 正确 1-255 错误
    $1 $2 ... ${10} --命令后面传入脚本的数据,以空格为分隔符
    $# --传统传参数量${$#}
    $* --表示所有传参,所有的传参以字符串形式进行输出
    $@ --表示所有传参,所有的传参以列表的形式进行输出
    【工作中要对所以的传参进行操作的时候,就要考虑$*和$@】

    定义变量格式:
    NAME=VALUE
    我们通过命令declare定义变量类型
    declare -i 整数 int() str()
    declare -a 数组
    变量命令:
    1.下划线的方式指定变量名称
    2.驼峰命令方式

    test文件测试,条件判断
    在脚本中,我们需要进行语句分支;说白了,就要做判断
    判断就是使用test命令来实现;
    使用格式:
    1.test [option] file
    2.[语句条件]
    常见的test选项:
    比较选项:
    -eq
    -ne
    -gt
    -ge
    -lt
    -le
    判断选项:
    -f
    -d
    -L
    -r -w -x
    关联选项:
    -o 代表或
    -a 代表与
    ! 代表非
    字符串判断:
    = 判断两边的字符串是否相等
    != 不等于
    -z 判断字符串是否存在
    -n 和 -z 相反,存在为假,不存在为真

    逻辑运算
    与 && 两边的命令都为真,结果才为真
    或 || 两边的命令一边为真就是真,同时为假才是假
    非 !=

    这个逻辑运算符,前后对接的都是单独存在的命令;
    [ $? -eq 0 ] && exit 0 || exit 1

    算术运算
    *let 1+1

  • 相关阅读:
    【Android命令行】apktool参数详解
    【Android】ANR+OOM+FC
    如何创建低成本沙箱环境?推荐你使用API仿真!
    关于代码覆盖率,你不可不知的两大陷阱!
    如何借助自动创建单元测试来提高单元测试的投资回报率(ROI)?
    [实用指南]如何使您的旧代码库(遗留代码)符合MISRA C 2012编码规范?
    超实用的10个技巧!让您无论使用哪种静态分析工具都能轻松更新现有的静态分析实现
    主数据管理(MDM)的6大层级简述,你不可不知的数据治理参考!
    【收藏】关于元数据(Metadata)和元数据管理,这是我的见过最全的解读!
    机器学习 | 基于机器学习的供应链管理之销售库存优化分析(实操分享)
  • 原文地址:https://www.cnblogs.com/zgzj/p/11348001.html
Copyright © 2011-2022 走看看