• Linux-bash命令集合


    Linux 复习

    命令 --help ls --help

    • *模糊匹配

    1.ls

    • ls [参数] [路径]
    • ls
    • ls -a 显示所有文件
    • ls -l = ll 暂时当前对文件的权限
    • ls -al 权限+所有文件
    • ls -al /etc

    2.pwd

    当前路径

    • last -n x #最近x次登录的用户

    3.cd

    • .. 上级目录
    • ./ 当前目录
    • / 根目录
    • ~ 用户目录 /home ,root用户在 /root

    4.文件、目录创建

    • mkdir [目录]
    • mkdir -p 多层级目录 递归
    • touch 文件名 创建文件
    • vi 文件 ==vim 文件 进入文件(没有就创建)
    • nano 1.txt
      yum install nano 一个工具 卸载nano

    yum remove nano

    5.删除

    • rmdir 删除空的文件、目录
    • rmdir -p 层级删除 从下级往上删
    • rm 文件 会二次确认
    • rm -f 文件 不会询问
    • rm -rf 路径、文件 r 递归
    • rm -rf *.txt 模糊匹配删除
    • clear 清除屏幕

    6.查看文件

    cat

    • cat 文件名
    • more 文件名 超出屏幕 只显示一屏 空格切换下一屏 enter换行
    • less 文件名 也是分屏 可以上下键翻行

    tail

    • tail -f 文件名 可以跟多个文件名 动态监听着文件,比如日志
    • tail -10 文件名 显示最后10行

    7.写入文件

    • ‘>’ 覆盖写入
    • ‘>>’ 追加写入 echo test >> test.log

    复制、移动

    • cp 源文件 目标文件(路径) 复制
    • mv 文件 目标路径 移动
    • mv b.txt c.txt 重命名

    8.压缩 解压

    压缩

    • tar -cvf 名称.tar a.txt b.txt 将a.txt b.txt 打包到tar包
    • tar -zcvf 名称.gz a.txt b.txt 将a.txt b.txt 打包到gz包 (也可以tar文件)
    1. c 表示创建新的归档文件
    2. v 列出打包的具体文件
    3. f 将被打包的文件
    4. z gzip方式

    解压

    • tar -xvf xx.tar
    • tar -zxvf xx.gz (如果tar文件的压缩方式是gzip,也可以解压tar文件)
    • tar -zxvf xx.gz -C 目录 解压到指定目录

    9.文件查找

    • find /root(目录) -name(以名称查找) "*a.txt" -ls(列出来)
    • find /root -user root -ls 以用户组为root的查找
    • find /root -perm -777 按权限查找,777的权限
    • which xx 只能找已加入环境变量的路径
    [root@tongjc ~]# which python
    /usr/bin/python
    

    awk 字符串切割

    • awk '{print $0}' #默认是以空格分割
    • awk -F '' '{print $0}' #可以指定分隔符
    [root@tongjc ~]# echo "123|456|789" | awk -F '|' '{print $0}'
    123|456|789
    [root@tongjc ~]# echo "123|456|789" | awk -F '|' '{print $1}'
    123
    [root@tongjc ~]# echo "123|456|789" | awk -F '|' '{print $2}'
    456
    [root@tongjc ~]# echo "123|456|789" | awk -F '|' '{print $3}'
    789
    
    • 以多个字符切割 | 代表或
    [root@tongjc ~]# echo "123+456-789" | awk -F '+|-' '{print $0}'
    123+456-789
    [root@tongjc ~]# echo "123+456-789" | awk -F '+|-' '{print $1}'
    123
    [root@tongjc ~]# echo "123+456-789" | awk -F '+|-' '{print $2}'
    456
    [root@tongjc ~]# echo "123+456-789" | awk -F '+|-' '{print $3}'
    789 
    
    • 切割后同时获取多个数据
    # 数据紧挨着
    [root@tongjc etc]# cat passwd |awk -F ':' '{print $1$4}'
    root0
    bin1
    daemon2
    adm4
    lp7
    sync0
    shutdown0
    halt0
    mail12
    
    # 数据以空格隔开   使用的是逗号
    [root@tongjc etc]# cat passwd |awk -F ':' '{print $1,$7}'
    root /bin/bash
    bin /sbin/nologin
    daemon /sbin/nologin
    adm /sbin/nologin
    lp /sbin/nologin
    sync /bin/sync
    
    # 也可以"	"分割  "
    "也可以 "--"自定义的符号也可以
    [root@tongjc etc]# cat passwd |awk -F ':' '{print $1"	"$7}'
    root    /bin/bash
    bin     /sbin/nologin
    daemon  /sbin/nologin
    adm     /sbin/nologin
    lp      /sbin/nologin
    sync    /bin/sync
    
    
    • BEGIN END
    echo -e "1|2|3
    4|5|6
    7|8|9" | awk -F '|' 'BEGIN{a=0}{a=a+$2}END{print a}'
    15
    
    • 练习1
    [root@tongjc home]# cat /etc/passwd |  awk -F ':' 'BEGIN{count=0}{name[count]=$1;count++}END{for(i=0;i<NR;i++)print i,name[i]}'
    0 root
    1 bin
    2 daemon
    3 adm
    4 lp
    5 sync
    6 shutdown
    7 halt
    8 mail
    9 operator
    10 games
    11 ftp
    12 nobody
    13 systemd-network
    14 dbus
    15 polkitd
    16 sshd
    17 postfix
    18 chrony
    19 tss
    
    • 练习2
    从testerhome中取处赞数
    a=`curl -s https://testerhome.com/topics | grep -o 'href="/topics/[0-9]*"' | awk -F '/|"' '{print $4}'`; for id in $a;do url='https://testerhome.com/topics/'$id;zan=`curl -s $url | grep -o -m1 '[0-9]* 个赞'`;if [ -n "$zan" ];then echo $url"有: " $zan;else echo $url"有: " "0 个赞";fi  done | awk -F '/' '{print $NF}'
    
    https://testerhome.com/topics/23275有:  0 个赞
    https://testerhome.com/topics/23192有:  0 个赞
    https://testerhome.com/topics/23301有:  9 个赞
    https://testerhome.com/topics/23362有:  0 个赞
    https://testerhome.com/topics/23355有:  0 个赞
    https://testerhome.com/topics/23326有:  0 个赞
    https://testerhome.com/topics/23271有:  1 个赞
    https://testerhome.com/topics/23266有:  0 个赞
    
    

    写入shell脚本

    #!/bin/bash
    a=`curl -s https://testerhome.com/topics | grep -o 'href="/topics/[0-9]*"' | awk -F '/|"' '{print $4}'`
    for id in $a
    do
            url='https://testerhome.com/topics/'$id
            zan=`curl -s $url | grep -o -m1 '[0-9]* 个赞'`
            if [ -n "$zan" ]
                    then
                            echo $url"有: " $zan
                    else
                            echo $url"有: " "0 个赞"
            fi
    done | awk -F '/' '{print $NF}'
    

    文本搜索grep

    • grep error 文件名 比如:log文件
    • grep -i 忽略大小写
    [root@tongjc ~]# grep "hello" 1
    hellodssd ss
    hello from tjc
    [root@tongjc ~]# grep -i "hello" 1
    HELLO FROM TJC
    hellodssd ss
    hello from tjc
    
    • grep -o 只显示匹配到的内容
    [root@tongjc ~]# cat 1 | grep -o "hello"
    hello
    hello
    
    • . *
      . 表示一个字符

      * 表示任意多个字符

    [root@tongjc ~]# echo abcdeee | grep -o "c.*"
    cdeee
    [root@tongjc ~]# echo abcdeeee | grep -o "c."
    cd
    
    • 结合管道
    [root@tongjc ~]# cat 1 | grep -i "hello"
    HELLO FROM TJC
    hellodssd ss
    hello from tjc
    
    • curl
    curl -s http://www.baidu.com/s?wd=罗志祥 | grep "结果约"
    
    • 结合正则
    [root@tongjc ~]# curl -s http://www.baidu.com/s?wd=罗志祥 | grep -o "结果约[0-9]"
    结果约4
    [root@tongjc ~]# curl -s http://www.baidu.com/s?wd=罗志祥 | grep -o "结果约[0-9]*"
    结果约428
    [root@tongjc ~]# curl -s http://www.baidu.com/s?wd=罗志祥 | grep -o "结果约[0-9,]*" 
    结果约428,000
    
    • 实际运用
    [root@tongjc ~]# echo mp3 >> baidu.keyword
    [root@tongjc ~]# echo 罗志祥 >> baidu.keyword
    [root@tongjc ~]# echo 周扬青 >> baidu.keyword
    [root@tongjc ~]# while read x;do echo $x;curl -s http://www.baidu.com/s?wd=$x;done < baidu.keyword | grep -o "结果约[0-9,]*"
    结果约1,370,000
    结果约425,000
    结果约191,000
    
    • tailf test.json | grep XXX

    sed 文本替换

    • sed 's/aaa/bbb'
    • sed 's/aaa/bbb/g' #全部替换
    [root@tongjc ~]# echo "cat dog fish cat" | sed 's/cat/wulala/'
    wulala dog fish cat
    [root@tongjc ~]# echo "cat dog fish cat" | sed 's/cat/wulala/g'
    wulala dog fish wulala
    

    也可以使用#分隔

    [root@tongjc ~]# echo "cat hello fish tjc --cat ;;cat" | sed 's#cat#hahaha#g'
    
    • sed替换时先将内容读到一个模式空间,替换的只是模式空间里面的内容,真实的内容并没有被替换

    需要使用sed -i 来替换

    [root@tongjc ~]# sed 's/mp3/AAAAAAAA/g' baidu.keyword 
    AAAAAAAA
    罗志祥
    周扬青
    [root@tongjc ~]# cat baidu.keyword 
    mp3
    罗志祥
    周扬青
    [root@tongjc ~]# sed -i 's/mp3/AAAAAAAA/g' baidu.keyword 
    [root@tongjc ~]# cat baidu.keyword 
    AAAAAAAA
    罗志祥
    周扬青
    
    • 替换防止手滑 备份很重要

    -i.bak 备份

    [root@tongjc ~]# sed -i.bak 's/mp3/AAAAAAAA/g' baidu.keyword 
    [root@tongjc ~]# ll
    总用量 10092
    -rw-r--r--  1 root root       61 427 21:01 1
    -rw-------. 1 root root     1202 35 11:21 anaconda-ks.cfg
    -rw-r--r--  1 root root 10312541 426 15:17 apache-tomcat-8.5.54.tar.gz
    -rw-r--r--  1 root root       29 428 12:16 baidu.keyword
    -rw-r--r--  1 root root       29 428 11:29 baidu.keyword.bak
    

    10.vi vim编辑器

    • i 在当前位置前插入
    • I 在当前行首插入
    • a 在当前位置后插入
    • A 在当前行尾插入
    • o 在当前行之后插入一行
    • O 在当前行之前插入一行 命令行里输入 /aa(内容) 直接跳转到相应内容的位置
    • :wq 保存退出
    • :q! 退出不保存
    • dd 删除一行
    • yy 复制当前行
    • p 粘贴
    • n+yy 复制当前到后n行
    • R 替换

    11.重定向

    • cat /root/home/test.json >> ./test.txt
    • 注意'>','>>' 覆盖和追加

    12.系统管理命令

    ps

    • ps 查看当前的进程
    • ps -e 显示所有进程
    • ps -f 显示当前进程--全格式
    • ps -es |grep java 查看所有java所有进程
    • jps -l 看java进程
    • kill -9 进程id 强制杀进程
    • echo $$ 显示当前进程id
    # bash里还可以启bash 
    [root@tongjc ~]# echo $$
    1040
    [root@tongjc ~]# bash
    [root@tongjc ~]# echo $$
    1211
    [root@tongjc ~]# exit
    exit
    [root@tongjc ~]# echo $$
    1040
    

    子进程

    变量作用域只在子线程内 新进程

    [root@tongjc ~]# a=222
    [root@tongjc ~]# (a=1;echo $a);echo $a
    1
    222
    #区别
    [root@tongjc ~]# a=222
    [root@tongjc ~]# { a=1;echo $a; };echo $a; 
    1
    1
    
    • 将程序放到后台执行

    &

    [root@tongjc ~]# sleep 10&
    [1] 1421
    
    • jobs
    [root@tongjc ~]# sleep 20&
    [1] 1440
    [root@tongjc ~]# jobs
    [1]+  运行中               sleep 20 & 
    
    • Ctrl+Z 停止前台的进程
    • bg x 继续执行
    [root@tongjc ~]# sleep 100
    ^Z[1]   完成                  sleep 20
    
    [2]+  已停止               sleep 100
    [root@tongjc ~]# bg 2
    [2]+ sleep 100 &
    [root@tongjc ~]# jobs
    [2]+  运行中               sleep 100 &
    
    • fg x 后台进程调到前台执行
    [root@tongjc ~]# sleep 100&
    [1] 1466
    [root@tongjc ~]# jobs
    [1]+  运行中               sleep 100 &
    [root@tongjc ~]# fg 1
    sleep 100
    

    管道

    将前面输出结果作为输入 cat /root/home/test.json | more

    13.权限

    • su root 用户切换 -rw-r--r-- 1 root root 0 4月 26 10:58 aa.txt
    • 第一个位置代表文件类型 d 代表文件夹 -代表普通文件 c设备文件 l 软连接(ls -s b.txt b)访问b的时候就相当于访问b.txt 类似快捷键
    • 文件读写执行权限
    • 类别 用户组 组内 其他
    • ugo user group other
    • r read 1
    • w write 2
    • x excute 4

    权限修改

    • chmod ugo=rwx 111.txt
    • chmod 777 xxx 分别对应ugo
    • chmod +x test1.sh 增加执行权限
    • chmod u+x xxx user增加执行权限

    14.网络操作

    • ip addr 主机ip (ifconfig)
    • hostname 主机名称 cat /etc/hostname
    • hostname xxx 修改hostname(当前生效,重启失效)
    • vi /etc/hostname 永久修改主机名

    域名和ip映射

    • 配置host vi /etc/hosts
    • 当前ip 主机名

    修改ip

    配置文件 修改(百度) 然后重启ip service network restart

    关闭防火墙

    • systemctl stop firewalld.service

    环境变量

    在~目录 vi .bash_profile

    • 添加环境变量: export PATH=$PATH:/XXXX/XXX

    然后执行:source ~/.bash_profile

    环境变量添加后,就可以在任意路径执行环境变量下的文件

    • echo $PATH 输出当前的环境变量

    安装软件

    更换centos的软件源

    1.下载源仓库文件,xxx.repo,,curl -o /etc/yum.repos.d/ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo

    2.将repo文件保存到/etc/yum.repos.d/目录中

    3.让当前库文件生效 yum clean cache yum makecache

    1.二进制安装

    软件已经编译和打包,只需下载解压即可安装

    • 下载jdk
    • 上传linux root
    • 解压 tar -xzvf jdk包
    • bin java
    • 全局起作用,配置环境变量

    2.RPM包

    软件按照redhat管理要求规范,RPM包进行发布,需要获取相应软件rpm包安装 有一个远程服务器,通过命令下载

    3.Yum在线安装

    rpm包已经在服务器 在线下载 安装 其他依赖包也会帮你下载下来

    yum install -y nano

    • 查看已安装 yum list installed | grep nano
    • 卸载 yum remove nano

    4.源码安装

    软件以源码工程的方式发布,需要获取源码进行编译安装

    shell

    命令语言 程序设计语言 xx.sh

    #!/bin/bash
        echo hello
    
    • 执行1 ./xx.sh --执行2 sh xx.sh --执行3 /bin/sh xx.sh

    变量

    1.变量定义 a=1 等号两边不能有空格 a=1;b=2

    echo $a  引用变量a
    [root@tongjc ~]# a='hello world'    有空格必须带上引号
    [root@tongjc ~]# echo a
    a
    [root@tongjc ~]# echo $a
    hello world
    

    2.单引号和双引号的区别 单引号中不能直接引用变量,会被当作字符串

    [root@tongjc ~]# a="hello world"
    [root@tongjc ~]# echo 'xiaowang $a'
    xiaowang $a
    [root@tongjc ~]# echo "xiaowang $a"
    xiaowang hello world
    

    3.变量引用最好{}

    [root@tongjc ~]# a="hello world"
    [root@tongjc ~]# echo $a_1
    
    [root@tongjc ~]# echo $a _1
    hello world _1
    [root@tongjc ~]# echo ${a} _1
    hello world _1
    [root@tongjc ~]# echo ${a}_1
    hello world_1
    

    4.预定义变量

    [root@tongjc ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    [root@tongjc ~]# echo $PWD
    /root
    [root@tongjc ~]# echo $USER
    root
    
    #!/bin/bash
    name="zhangsan"  #等号不能空格
    echo $name
    echo ${name}
    echo "你好"
    

    5.数组

    • 定义: (aaa bbb ccc)
    [root@tongjc ~]# a=(1 2 3 4 5)
    [root@tongjc ~]# echo $a
    1
    [root@tongjc ~]# echo ${a[*]}
    1 2 3 4 5  
    [root@tongjc ~]# echo ${a[@]} 
    1 2 3 4 5
    
    • 取值: array_name[index]
    [root@tongjc ~]# a=(1 2 3 4 5)
    [root@tongjc ~]# echo ${a[-1]}
    5
    [root@tongjc ~]# echo ${a[-2]}
    4
    
    • 数组长度: #array_name[@]
    [root@tongjc ~]# echo ${#a[*]}
    5
    
    • 元素长度: #array_name[1]
    #!/bin/bash
    array_name=(a b11111 c2)
    echo ${array_name[1]} #取出index对应值
    echo ${array_name[@]} #取出所有值 @ * 都可以
    echo ${#array_name[@]} #打印长度
    echo ${array_name[1]} #b11111的长度
    

    6.命令的返回值赋给变量

    • 通过`` 反引号
    [root@tongjc ~]# ls
    anaconda-ks.cfg  apache-tomcat-8.5.54.tar.gz  home  soft
    [root@tongjc ~]# a=`ls`
    [root@tongjc ~]# echo $a
    anaconda-ks.cfg apache-tomcat-8.5.54.tar.gz home soft
    [root@tongjc ~]# echo my dir is $(ls)
    my dir is anaconda-ks.cfg apache-tomcat-8.5.54.tar.gz home soft    #不是所有系统都支持
    
    • 赋值给数组
    [root@tongjc ~]# a=(`ls`)
    [root@tongjc ~]# echo $a
    anaconda-ks.cfg
    [root@tongjc ~]# echo ${a[*]}
    anaconda-ks.cfg apache-tomcat-8.5.54.tar.gz home soft
    

    7.特殊符号


    • -e 表示开启转译模式
    [root@tongjc ~]# echo "a
    bb"
    a
    bb
    [root@tongjc ~]# echo -e "a
    bb"
    a
    bb
    [root@tongjc ~]# echo "a"bb"
    a"bb
    
    • $(())
      对变量进行操作
    [root@tongjc ~]# a=1;b=2
    [root@tongjc ~]# echo $((a+b))
    3
    [root@tongjc ~]# echo $(($a+$b))
    3
    #可以直接进行计算
    [root@tongjc ~]# echo $((3+2))
    5
    [root@tongjc ~]# echo $((3/2))
    1
    
    • (())
    [root@tongjc ~]# a=5
    [root@tongjc ~]# ((a=a+5))
    [root@tongjc ~]# echo $a
    10
    
    • $?

    判断上一条命令是否成功 成功 ==0 ;;;如果不为0 都是失败的;;

    [root@tongjc ~]# a=4;b=5
    [root@tongjc ~]# ((a<b))
    [root@tongjc ~]# echo $?
    0
    [root@tongjc ~]# ((a>b))
    [root@tongjc ~]# echo $?
    1
    

    变量类型

    • 字符串 "string"
    • 布尔 true false
    [root@tongjc ~]# true
    [root@tongjc ~]# echo $?
    0
    [root@tongjc ~]# false
    [root@tongjc ~]# echo $?
    1
    
    

    比较大小

    eq 等于

    ne 不等

    ge 大于等于

    gt 大于

    le 小于等于

    lt 小于

    [root@tongjc ~]# [ 2 -eq 2 ];echo $?
    0
    [root@tongjc ~]# [ 2 -ne 3 ];echo $?
    0
    [root@tongjc ~]# [ 2 -le 3 ];echo $?
    0
    [root@tongjc ~]# [ 2 -lt 3 ];echo $?
    0
    [root@tongjc ~]# [ 4 -gt 3 ];echo $?
    0
    [root@tongjc ~]# [ 3 -ge 3 ];echo $?
    0
    
    • 逻辑判断

      -a 与 相当于&&

    [root@tongjc ~]# [ 4 -ge 3 -a 4 -lt 5 ];echo $?
    0
    
    -o 或 or
    [root@tongjc ~]# [ 4 -ge 3 -o 7 -lt 5 ];echo $?
    0
    
    • 数字
    [root@tongjc ~]# a=1 
    [root@tongjc ~]# echo $((a++))
    1
    [root@tongjc ~]# echo $((++a))
    3   # 上面a++已经为2

    小数运算

    [root@tongjc ~]# echo $((2/3))
    0
    [root@tongjc ~]# awk 'BEGIN{print 2/3}'
    0.666667
    

    内置判断

    -e 判断文件是否存在

    [root@tongjc ~]# [ -e test ];echo $?
    1
    [root@tongjc ~]# [ -e soft ];echo $?
    0
    

    -d 判断是否子目录

    -f 是否一个普通文件

    -r 判断是否可读文件

    -w 是否可写文件

    -x 是否可执行文件

    -s 是否非空文件

    字符串操作片

    • : 切片
    [root@tongjc ~]# s="hello from ttt"
    [root@tongjc ~]# echo $s
    hello from ttt
    [root@tongjc ~]# echo ${s}
    hello from ttt
    [root@tongjc ~]# echo ${s:6}
    from ttt
    [root@tongjc ~]# echo ${s:6:3}
    fro
    
    • 长度获取
    [root@tongjc ~]# echo ${#s}
    14
    
    • 掐头#
    [root@tongjc ~]# echo ${s#hello}
    from ttt
    [root@tongjc ~]# echo ${s#*o}
    #找到的第一个o,把他和之前的去掉
     from ttt
    [root@tongjc ~]# echo ${s#*m}
    ttt
    
    • 贪婪匹配##-掐头

    会一直匹配到最后一个

    [root@tongjc ~]# s="hello from testerhome"
    [root@tongjc ~]# echo ${s#*m}
    testerhome
    [root@tongjc ~]# echo ${s##*m}
    e
    [root@tongjc ~]# ^C
    [root@tongjc ~]# s="hello from testerhome meew"
    [root@tongjc ~]# echo ${s###*m}
    hello from testerhome meew
    [root@tongjc ~]# echo ${s##*m}
    eew
    #作为一个整体,引号引起来
    [root@tongjc ~]# echo "${s##*m}"
    eew
    
    • 去尾 %
    [root@tongjc ~]# s="hello from testerhome meew"
    [root@tongjc ~]# echo ${s%meew}
    hello from testerhome
    
    • 贪婪去尾 %%
    [root@tongjc ~]# s="hello from testerhome meew"
    [root@tongjc ~]# echo ${s%%o*}
    # *是通配
    hell
    
    • 替换内容
    [root@tongjc ~]# echo ${s/tester/tongjc}
    hello from tongjchome meew
    

    参数传递

    • $0 代表当前执行文件
    • $1 代表第一个参数位置
    #!/bin/bash
    echo "获取脚本执行的参数:$0"
    echo "获取第一个参数:$1"
    echo "获取第二个参数:$2"
    echo "获取参数的个数:$#"
    echo "获取到的参数(str):$*"
    echo "获取到的参数(每一个参数都是一个str):$@"
    echo "获取当前进程的ID(PID):$$"
    

    结果

    [root@tongjc home]# sh test1.sh hh ss hah
    获取脚本执行的参数:test1.sh
    获取第一个参数:hh
    获取第二个参数:ss
    获取参数的个数:3
    获取到的参数(str):hh ss hah
    获取到的参数(每一个参数都是一个str):hh ss hah
    获取当前进程的ID(PID):2091
    
    • $* 和 $@的区别
    #!/bin/bash
    for i in "$*";do
            echo $i
    done
    
    echo "---------------"
    
    for i in "$@";do
            echo $i
    done
    

    结果:

    aa ss dd ww cc
    ---------------
    aa
    ss
    dd
    ww
    cc
    

    例子说明$* 代表一个整体(传入是一个整体) $@ 代表多个

    • 如果传入 ./test.sh '1 2 3 4' 那就都是输出1 2 3 4

    for循环

    for (());do
    循环体
    done
    
    [root@tongjc ~]# for ((i=1;i<10;i++));do echo ${i};done
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    • 循环数组
    [root@tongjc ~]# for i in ${a[@]};do echo ${i};done
    182
    3
    4
    5
    6
    9
    
    • 循环列表也行
    [root@tongjc ~]# for i in `ls`;do echo ${i};done
    anaconda-ks.cfg
    apache-tomcat-8.5.54.tar.gz
    home
    soft
    

    if语句

    if [ -n ];   #-n表示非空
    then ...;
    else ...;
    fi
    

    命令行中

    [root@tongjc ~]# if [ -e test ];then echo exist;else echo not exist;fi
    not exist
    

    sh中

    #!/bin/bash
    if [ test "$1" -eq "$2" ];
    then echo "相等";
    else
    echo "不等";
    fi
    
    • && ||
    [root@tongjc ~]# [ -e test ]&&echo exist || echo not exist
    not exist
    [root@tongjc ~]# [ -e soft ]&&echo exist || echo not exist
    exist
    

    while循环

    while 条件 
    do 
        循环体
    done
    
    [root@tongjc home]# while [ $int -le 5 ];do echo $int;((int=int+1));done
    1
    2
    3
    4
    5
    
    #!/bin/bash
    int=1
    while(($int<=5))
    do
            echo $int
            let "int++"  自增
    done
    

    将1中的内容重定向到循环体

    [root@tongjc home]# while read x;do echo $x;done < 1
    a
    b
    c
    d
    e
    f
    
    • read 读 读文件 读输入内容
    [root@tongjc home]# read -p "enter:" a;echo $a
    enter:sss
    sss
    

    退出控制

    • return
    • break
    [root@tongjc home]# echo *
    1 aa.txt bb.txt test test1.sh test2.sh test3.sh test4.sh test5.sh test6.sh test.json test.sh tjc.sh
    [root@tongjc home]# for i in *;do echo ${i};if [ -f $i ];then break;fi;done
    1
    [root@tongjc home]# for i in *;do echo ${i};if [ -d $i ];then break;fi;done
    1
    aa.txt
    bb.txt
    test
    
    • break 2 退出两层循环
    • continue
    [root@tongjc home]# for i in *;do if [ -d $i ];then echo $i is dir;else continue; fi;done
    test is dir
    [root@tongjc home]# for i in *;do if [ -f $i ];then echo $i is dir;else continue; fi;done
    1 is dir
    aa.txt is dir
    bb.txt is dir
    test1.sh is dir
    test2.sh is dir
    test3.sh is dir
    test4.sh is dir
    test5.sh is dir
    test6.sh is dir
    test.json is dir
    test.sh is dir
    tjc.sh is dir
    [root@tongjc home]# 
    
    • continue 2 跳到上层循环的下次循环中

    开启一个python WEB服务

    python -m CGIHTTPServer

    通过访问192.168.198.102:8000 可以访问到我虚拟机的web服务。 192.168.198.102:8000/hh.html 可以访问到页面

    • 查询公网 ip
    [root@tongjc ~]# curl icanhazip.com
    182.150.30.52
    

    脚本

    • 函数
    #!/bin/bash
    
    gotest(){
            echo "this is a test function"
            read -p "var_1: " var_1
            read -p "var_2: " var_2
            if [ $var_1 -eq $var_2 ]
            then 
                    echo "var_1 == var_2"
            elif [ $var_1 -lt $var_2 ]
            then 
                    echo "var_1 < var_2"
            else
                    echo "var_1 > var_2"
            fi
    }
    gotest
    
    • 传参 需要传10个及以上的参数时,参数引用需要${10}
    functest() {
    echo "获取脚本执行的参数:$0"
    echo "获取第一个参数:$1"
    echo "获取第二个参数:$2"
    echo "获取参数的个数:$#"
    echo "获取到的参数(str):$*"
    echo "获取到的参数(每一个参数都是一个str):$@"
    echo "获取当前进程的ID(PID):$$"
    echo "获取第十个参数:$10"
    echo "获取第十个参数:${10}"
    echo "获取第十一个参数:${11}"
    }
    
    functest p 2 3 4 5 a b c d e f g h
    #结果
    获取脚本执行的参数:./test1.sh
    获取第一个参数:p
    获取第二个参数:2
    获取参数的个数:13
    获取到的参数(str):p 2 3 4 5 a b c d e f g h
    获取到的参数(每一个参数都是一个str):p 2 3 4 5 a b c d e f g h
    获取当前进程的ID(PID):4670
    获取第十个参数:p0
    获取第十个参数:e
    获取第十一个参数:f
    
    • 用户无限输入 直到输入quit
    while true
    do
            read -p "input:" input_v
            if [ "quit" == ${input_v} ]
            then
                    break
            else
    
                    echo ${input}
            fi
    done
    
    • 当在awk中引用外部变量时,需要"$a"
    read -p "input" a
    read -p "input" b
    echo $(($a+$b))
    echo $(($a*$b))
    echo $(($a-$b))
    echo $(($a/$b))
    echo `awk "BEGIN{print "$a"/"$b"}"`
    

    性能相关

    • cat /proc/cpuinfo cpu信息
    • free -m 内存监控 单位m top的单位是kb
    [root@tongjc home]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1495          84        1317           8          92        1287
    Swap:           819           0         819
    
    • df -h 查看硬盘
  • 相关阅读:
    串口打印信息
    网上下的ARM入门笔记
    职业生涯规划之驱动开发笔试题
    哈佛学生是如何度过大学4年的
    9G忠告打基础
    新塘M0Timer定时器篇
    ARM裸机篇按键中断
    linux驱动面试题
    裸机程序循环加法操作
    ARM裸机篇串口UART实验
  • 原文地址:https://www.cnblogs.com/tongjc-0901/p/12800210.html
Copyright © 2020-2023  润新知