zoukankan      html  css  js  c++  java
  • Title

    一、test命令

    -d :目录                                test  -d  /boot

    -s :文件长度 > 0、非空            test  -s  a.txt

    -f :正规文件                           test  -f  a.txt

    -w :可写                                test  -w  a.txt

    -r :可读                                 test  -r   a.txt

    -x :可执行                              test  -x  a.txt

    -L :符号连接                                     

    -u :文件有 suid 位设置

    -z :空串

    -n :非空串

    -eq :等于                               [ 50 -eq 50 ]

    -ne :不等于                            [ 50 -ne 60 ]

    -gt :大于                                [ 50 -gt 40 ]

    -lt :小于                                 [ 50 -lt 60 ]

    -ge :大于等于                          [ 50 -ge 50 ]

    -le :小于等于                           [ 50 -le 50 ]

    比较数字,使用(( ))

    其他测试使用 [[ ]]

    包含数字比较的混合测试,使用[[ expr1 && expr2 ]] (( expr1 || expr2 ))

    du -sh /boot/                          #查看文件大小

    find / -type f                           #查看普通文件

    find / -name "*.txt"                 #查看根下以.txt结尾的文件

    find / -size +30M                     #找出根下大于30M的文件

    find / -size +10M -size +30M    #找出根下大于10M且小于30M的文件

    grep -rl  'root' /test                  #在/test下找出含root名的文件

     二、grep作业


    -n:显示行号

    -o:只显示匹配的内容

    -q:静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

    -l:如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc 

    -A:如果匹配成功,则将匹配行及其后n行一起打印出来

    -B:如果匹配成功,则将匹配行及其前n行一起打印出来

    -C:如果匹配成功,则将匹配行及其前后n行一起打印出来

    -c:如果匹配成功,则将匹配到的行数打印出来

    -E:等于egrep,扩展

    -i:忽略大小写

    -v:取反,不匹配

    -w:匹配单词

    正则表达式及字符处理


    目标文件/etc/passwd,使用grep命令或egrep

    1.显示出所有含有root的行:

    egrep "root" /etc/passwd

    2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:

    egrep -C 2 "bash" /etc/passwd

    3. 显示出有多少行含有nologin。

    egrep -c "nologin" /etc/passwd

    4.显示出那些行含有root,并将行号一块输出。

    egrep -n "nologin" /etc/passwd

    5.显示出文件中

    6.新建用户
    abominable
    abominate
    anomie
    atomize
    编写正则表达式,将他们匹配出来

    egrep "a.omi(nabl|nat|z|)e" /etc/passwd

    7.建四个用户
    Alex213sb
    Wpq2222b
    yH438PIG
    egon666 egon
    过滤出用户名组成是字母+数字+字母的行

    egrep '^[a-Z]+[0-9]+[a-Z]+' /etc/passwd

    8.显示出/etc目录下所有包含root的文件名

    egrep -rl "/root" /etc

    9. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行

    grep -v '^#' /etc/ssh/sshd_config |grep -v '^ *$'

    三、Sed作业:以/etc/passwd文件为模板

    1,删除文件每行的第一个字符。

    sed -r 's/^(.)(.*)/2/' /etc/passwd

    2,删除文件每行的第二个字符。

    sed -r 's/^(.)(.)(.*)/13/' /etc/passwd

    3,删除文件每行的最后一个字符。

    sed -r 's/(.*)(.)$/1/' /etc/passwd

    4,删除文件每行的倒数第二个字符。

    sed -r 's/(.*)(.)(.)$/13/' /etc/passwd

    5,删除文件每行的第二个单词。

    sed -r 's/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/124/' /etc/passwd

    6,删除文件每行的倒数第二个单词。

    sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)$/134/' /etc/passwd

    7,删除文件每行的最后一个单词。

    sed -r 's/([^a-Z]+)([a-Z]+)$/1/' /etc/passwd

    8,交换每行的第一个字符和第二个字符。

    sed -r 's/^(.)(.)(.*)/213/' /etc/passwd

    9,交换每行的第一个字符和第二个单词。

    sed -r 's/^(.)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/42315/' /etc/passwd

    10,交换每行的第一个单词和最后一个单词。

    sed -r 's/^([a-Z]+)([^a-Z]+)(.+)([^a-Z]+)([a-Z]+)$/52341/' /etc/passwd

    11,删除一个文件中所有的数字。

    sed -r 's/[0-9]+//g' /etc/passwd

    12,删除每行开头的所有空格。

    sed -r 's/^ *//g' /etc/passwd

    13,用制表符替换文件中出现的所有空格。

    sed -r 's/ / /g' /etc/passwd

    14,把所有大写字母用括号()括起来。

    sed -r 's/[A-Z]/(&)/g' /etc/passwd

    15,打印每行3次。

    sed 'p;p' /etc/passwd

    16,隔行删除。

    sed '1~2d' /etc/passwd

    17,把文件从第2行到第5行复制到第7行后面。(选做题)

    sed '1h;3,5H;7G' test

    18,把文件从第2行到第5行移动到第7行后面。(选做题)

    sed '2h;3,5H;7G' test

    19,只显示每行的第一个单词。

    sed -r 's/^([a-Z]+)([^a-Z]+)(.*)$/1/' /etc/passwd

    20,打印每行的第一个单词和第三个单词。

    sed -r 's/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)$/1 5/' /etc/passwd

    四、awk作业

    打印uid在30~40范围内的用户名。

    awk -F: '$3>29&&$3<41{print $1}' /etc/passwd

    打印第5-10行的行号和用户名

    awk -F: 'NR>4&&NR<11{print $1,NR}' etc/passwd

    打印奇数行

    awk -F: 'NR%2{ print NR,$0}' /etc/passwd

    打印偶数行

    awk -F: '!(NR%2){print NR,$0}' /etc/passwd

    打印字段数大于5的行

    awk -F: 'NF>5{print NR,$0}' /etc/passwd

    打印UID不等于GID的用户名

    awk -F: '$3!=$4{print NR,$1}' /etc/passwd

    if 结构

    #!/bin/bash
    
    var='/etc/init.d'
    #var='/dev/sda'
    if [ -d $var ]                              #如果$var是目录文件,则输出$var is directory
        then
            echo "$var is directory"
    elif [ -b $var ]                            #如果$var是block块,则输出$var is block
        then
            echo "$var is block"
    elif [ -f $var ]                             #如果$var是正规文件,则输出$var is regular file
        then
            echo "$var is regular file"
    else                                           #以上都不满足则输出unknow
            echo 'unknow'
    fi                                               #fi表示if语句结束
    View Code

    接收输入参数的if语句

    #!/bin/bash
    
    if [ -d $1 ]                                  #$1表示输入的第一个参数
    
        then
    
            echo "$1 is directory"
    
    elif [ -b $1 ]
    
        then
    
            echo "$1 is block"
    
    elif [ -f $1 ]
    
        then
    
            echo "$1 is regular file" else echo 'unknown'
    
    fi
    View Code

    while循环

    #!/bin/bash
    
    login=0
    
    while [ $login != 1 ]
    
    do
    
        read -p 'please input your name: ' name                 #输入用户名
    
        read -p 'please input your password: ' pwd              #输入密码
    
        if [ -z $name ] || [ -z $pwd ]                                  #判断输入是否有输入为空,返回继续循环
    
            then
    
                continue
    
        fi
    
        if [ $name == 'mu' ] && [ $pwd == '123' ]              #匹配正确,则输出登录成功
    
            then
    
                echo 'login sucessful'
    
                login=1                                                       #方便退出循环 fi done
    View Code

    练习while循环

    #!/bin/bash
    
    var1=AAA
    
    var2=BBB
    
    var3=CCC
    
    while :
    
    do
    
        clear #清屏
    
        echo -e "A:${var1}
    B:${var2}
    C:${var3}" #
    
        temp=$var1
    
        var1=$var2
    
        var2=$var3
    
        var3=$temp
    
        sleep 1
    
    done
    View Code

     

    资料来源:http://www.cnblogs.com/linhaifeng/p/6602149.html#_label4







  • 相关阅读:
    数据库范式
    SQL基础
    JAVA流
    response.getWriter()和jsp中的out对象的区别
    JAVA排序(冒泡,直接选择,反转)
    Collections类常用方法
    JAVA集合
    JAVA面向对象(重载,重写 常用的 toString/equals)
    Java面向对象一(封装 继承 多态 类 对象 方法)
    JAVA基础
  • 原文地址:https://www.cnblogs.com/guotianbao/p/6682085.html
Copyright © 2011-2022 走看看