精华内容
下载资源
问答
  • 主要介绍了Linux Shell脚本系列教程(二):终端打印命令详解,本文着重讲解了echo终端打印、printf终端打印两个打印出输出命令,需要的朋友可以参考下
  • linux shell脚本编程 自动化脚本 awk sed grep find 文本分析 LinuxShell命令行及脚本编程实例详解 本文github window 下 从零开始——PowerShell应用入门(全例子入门讲解) 各种逗比脚本参考 参考代码1 参考...

    linux shell脚本编程 自动化脚本 awk sed grep find 文本分析 LinuxShell命令行及脚本编程实例详解

    本文github

    window 下 从零开始——PowerShell应用入门(全例子入门讲解)

    各种逗比脚本参考

    参考代码1

    参考代码2

    Linux-Shell脚本编程书籍代码

    把平时有用的手动操作做成脚本,这样可以便捷的使用

    awk 与 sed 学习,包括了知识点介绍,和一些习题练习

    三十分钟学会AWK

    三十分钟学会SED

    Shell脚本学习笔记

    LinuxShell命令行及脚本编程实例详解 推荐 百度下载

    LinuxShell命令行及脚本编程实例详解 推荐 CSDN下载

    脚本解释器

    sh

    即Bourne shell,POSIX(Portable Operating System Interface)标准的shell解释器,它的二进制文件路径通常是/bin/sh,由Bell Labs开发。

    bash

    Bash是Bourne shell的替代品,属GNU Project,二进制文件路径通常是/bin/bash。业界通常混用bash、sh、和shell,比如你会经常在招聘运维工程师的文案中见到:熟悉Linux Bash编程,精通Shell编程。

    在CentOS里,/bin/sh是一个指向/bin/bash的符号链接:

    [root@centosraw ~]# ls -l /bin/*sh
    -rwxr-xr-x. 1 root root 903272 Feb 22 05:09 /bin/bash
    -rwxr-xr-x. 1 root root 106216 Oct 17  2012 /bin/dash
    lrwxrwxrwx. 1 root root      4 Mar 22 10:22 /bin/sh -> bash
    

    但在Mac OS上不是,/bin/sh和/bin/bash是两个不同的文件,尽管它们的大小只相差100字节左右:

    iMac:~ wuxiao$ ls -l /bin/*sh
    -r-xr-xr-x  1 root  wheel  1371648  6 Nov 16:52 /bin/bash
    -rwxr-xr-x  2 root  wheel   772992  6 Nov 16:52 /bin/csh
    -r-xr-xr-x  1 root  wheel  2180736  6 Nov 16:52 /bin/ksh
    -r-xr-xr-x  1 root  wheel  1371712  6 Nov 16:52 /bin/sh
    -rwxr-xr-x  2 root  wheel   772992  6 Nov 16:52 /bin/tcsh
    -rwxr-xr-x  1 root  wheel  1103984  6 Nov 16:52 /bin/zsh
    

    高级编程语言

    理论上讲,只要一门语言提供了解释器(而不仅是编译器),这门语言就可以胜任脚本编程,常见的解释型语言都是可以用作脚本编程的,如:Perl、Tcl、Python、PHP、Ruby。Perl是最老牌的脚本编程语言了,Python这些年也成了一些linux发行版的预置解释器。

    编译型语言,只要有解释器,也可以用作脚本编程,如C shell是内置的(/bin/csh),Java有第三方解释器Jshell,Ada有收费的解释器AdaScript。

    如何选择shell编程语言

    熟悉 vs 陌生

    如果你已经掌握了一门编程语言(如PHP、Python、Java、JavaScript),建议你就直接使用这门语言编写脚本程序,虽然某些地方会有点啰嗦,但你能利用在这门语言领域里的经验(单元测试、单步调试、IDE、第三方类库)。

    新增的学习成本很小,只要学会怎么使用shell解释器(Jshell、AdaScript)就可以了。

    简单 vs 高级

    如果你觉得自己熟悉的语言(如Java、C)写shell脚本实在太啰嗦,你只是想做一些备份文件、安装软件、下载数据之类的事情,学着使用sh,bash会是一个好主意。

    shell只定义了一个非常简单的编程语言,所以,如果你的脚本程序复杂度较高,或者要操作的数据结构比较复杂,那么还是应该使用Python、Perl这样的脚本语言,或者是你本来就已经很擅长的高级语言。因为sh和bash在这方面很弱,比如说:

    • 它的函数只能返回字串,无法返回数组
    • 它不支持面向对象,你无法实现一些优雅的设计模式
    • 它是解释型的,一边解释一边执行,连PHP那种预编译都不是,如果你的脚本包含错误(例如调用了不存在的函数),只要没执行到这一行,就不会报错

    环境兼容性

    如果你的脚本是提供给别的用户使用,使用sh或者bash,你的脚本将具有最好的环境兼容性,perl很早就是linux标配了,python这些年也成了一些linux发行版的标配,至于mac os,它默认安装了perl、python、ruby、php、java等主流编程语言。

    第一个shell脚本

    编写

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了。

    输入一些代码,第一行一般是这样:

    #!/bin/bash
    #!/usr/bin/php
    

    “#!”是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行。

    运行

    运行Shell脚本有两种方法:

    作为可执行程序

    chmod +x test.sh
    ./test.sh
    

    注意,一定要写成./test.sh,而不是test.sh,运行其它二进制的程序也一样,直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。

    通过这种方式运行bash脚本,第一行一定要写对,好让系统查找到正确的解释器。

    这里的"系统",其实就是shell这个应用程序(想象一下Windows Explorer),但我故意写成系统,是方便理解,既然这个系统就是指shell,那么一个使用/bin/sh作为解释器的脚本是不是可以省去第一行呢?是的。

    参考资料

    LinuxShell命令行及脚本编程实例详解笔记

    LinuxShell命令行及脚本编程实例详解

    Linux 典藏大师系列丛书

    shell 脚本的构成:

    1. shell 关键字 if ...then else; for ...done; while do done
    2. shell 命令 export,echo,exit,pwd,return
    3. linux 命令 data rm mkdir cd 
    4. 文本处理功能 awk cut sed grep
    5. 函数 功能语句集合 /etc/init.d/functions
    6. 控制流语句 if...then...else
    

    bash 登录脚本 ~/.bash_profile 打开shell 会执行的脚本

    bash 退出脚本 ~/bash_logout 退出shell 会执行的脚本

    shell 变量

    username=wanyouwen
    
    或者
    
    username="wanyouwen"   注意等号=前后不能有空格
    
    赋值数字给变量
    
    var=2
    
    注意shell默认赋值是字符串赋值
    
    如 var=$var+1
    
    echo var
    
    >>> 1+1  看到是不是2
    如果想把算术表达式的值赋给一个变量,需要用let
    
    let var=2+3
    
    echo $var
    
    5
    
    
    # 使用(())
    cnt=0
    
    cnt=$(($cnt+1))
    
    将一个变量赋值给另外一个变量
    a=3
    b=$a
    echo $b
    
    将命令的结果赋值给变量
    var='pwd'  或者 var=$(pwd) 
    echo $var
    
    获取命令行输入 获取read命令得到的值
    
    $ echo -n "Enter var:"; read var
    Enter var: 1234
    $ echo var
    1234
    

    打印变量

    最简单的使用 echo
    
    echo $变量名
    
    var=10
    echo $var
    echo ${var}
    echo "value: $var"
    echo "value: ${var}"
    
    也可以使用 printf
    
    printf  "格式" $变量
    
    var = 111
    printf "%s\n" $var   类似于c语言的printf()函数
    
    %d  %i  带符号十进制格式打印
    %o      无符号八进制
    %u      无符号十进制
    %x      无符号小写十六进制
    %X      无符号大写十六进制
    %f      浮点数格式
    %e      双精度浮点数  <N>e<N>
    %E      双精度浮点数  <N>E<N>
    #c      以字符的格式
    %s      以字符串的格式
    %n      指定打印字符的个数
    %%      打印一个%
    
    转义字符
    \"      打印一个双引号 "
    \\ 
    \a      警告音
    \b      删除前一个字符
    \f      换页符
    \r      回车,回到本行开头
    \n      换行,到下一行开头
    \t      一个制表符
    \v      竖直制表符
    
    ### echo中 使用转移字符  需要 -e 选项使能转移字符
    $ echo -e "User name: $USER\tHome Directory: $HOME\n"
    >>> User name: ywy  Home Directory: /home/wyw
    
    ######字符串#####
    var=shell
    $printf "%s\n" $var
    shell
    $printf "%1s\n" $var   #指定参数长度小于实际长度,按实际长度打印
    shell
    $printf "%1.3s\n" $var #小数点后指示打印的字符串长度
    she
    $printf "%1.6s\n" $var #小数点后指示打印的字符串长度
    shell
    $printf "%3.6s\n" $var #小数点后指示打印的字符串长度
    shell
    $printf "%6.6s\n" $var #指定长度大于实际长度,左边补空格
     shell                
    $printf "%10.6s\n" $var #指定长度大于实际长度,左边补空格
         shell              #左边补了5个空格
    $printf "%10.2s\n" $var #指定长度大于实际长度,左边补空格
         sh                 #左边补了5个空格,同时只打印前2个字符
    
    
    ####小数######
    $varr=123.45678
    $printf "%5.1f\n" $varr #打印总长度5(包含小数点)保留小数点后1位数字
    1123.5
    $printf "%6.2f\n" $varr #
    1123.46
    $printf "%7.3f\n" $varr #
    123.457
    $printf "%9.3f\n" $varr #打印长度9,保留小数点后3位,只有7位长度,左侧空格
      123.457
    $printf "%10.3f\n" $varr #打印长度10,保留小数点后3位,只有7位长度,左侧空格
       123.457
    
    

    变量引用 双引号 “$变量名” 将变量整体化

    
    LIST="one two three"
    
    for var in $LIST   # 将变量的值分成3个参数传递给了for循环
    do
        echo "$var"
    done
    >>>
    one
    two
    three
        
    for var in "$LIST"   # 将变量的值作为一个整体传递给了for循环
    do
        echo "$var"
    done
    >>>
    one
    
    

    export 变量名=变量值 声明定义全局变量 多bash环境可用

    readonly 变量名=变量值 声明只读变量

    unset 变量名 删除 export 定义的全局变量,不能删除 readonly 只读变量

    检查变量是否存在 变量名? 不存在提示语 或 ${变量名:? 不存在提示语}

    JAVA_HOME=/usr/local/jdk
    export JAVA_HOME
    echo ${JAVA_HOME:? Error variable is not defined}
    >>> /usr/local/jdk
    
    unset JAVA_HOME
    echo ${JAVA_HOME:? Error variable is not defined}
    >>> -bash JAVA_HOME: Error variable is not defined
    
    
    还有一种更简单的检查变量是否存在的方法 使用 if语句来判断
    

    回调 历史命令

    #### 回调 历史命令
    history
    >>>
    会显示之前输入过的命令 
    id1 命令
    ...
    idn 命令
    
    !! 输入两个! 会执行就一条指令
    !+id号 会执行历史命令中对应id号的命令
    !+历史命令开头的字符  会执行历史命令中有已字符开头的命令
    

    shell中的扩展 展开 繁殖

    大括号扩展 波浪号扩展 参数和变量扩展 命令替换 算术扩展 进程替换 单词拆分 和 文件名扩展

    大括号扩展 前缀字符{字符1,字符2,…,字符n}后缀字符

    echo a{b,c,d}e
    >>> abe ace ade
    
    echo {a..z}  # 按字母表顺序显示 a~z字母
    >>> a b c d ... x y z
    
    echo {0..10} # 显示0~10的数字
    >>> 0 1 2 3 ... 9 10
    
    echo {6..-4} # 显示6~-4的数字
    >>> 6 5 4 3 ... 0 -1 -2 -3 -4
    
    echo {g..a} # 显示g~a的字母 反向
    >>> g f e d c b a
    
    echo {1..3}{a..c}
    >>> 1a 1b 1c 2a 2b 2c 3a 3b 3c
    
    ## 嵌套
    echo a{{b,c}1,{d,e}3,f}h
    ab1h ac1h ad3h ae3h afh
    
    ## 大括号扩展 繁殖命令
    在 当前目录下创建三个文件夹 son1 son2 son3
    mkdir ./{son1,son2,son3}
    
    ## bash 4.0 新功能 {起点..终点..步长}
    echo {0..10..2}
    >>> 0 2 4 6 8 10
    
    echo {10..3..-2}
    >>> 10 8 6 4 2
    
    echo {a..k..2}
    >>> a c e g i k
    
    echo {0001..11..5}   # 指定形式
    >>> 0001 0006 0011
    
    

    ~ 波浪号 指代用户主目录

    cd ~
    pwd
    >>> /home/wyw
    cd ~wyw
    pwd
    >>> /home/wyw
    
    ~+ 指代 shell变量 PWD的值
    echo ~+
    >>> /tmp
    echo $PWD
    >>> /tmp
    
    ~-  指代 shell变量 LODPWD 的值
    echo ~1
    >>> /home/wyw
    echo $LODPWD
    >>> /home/wyw
    
    

    文件名扩展

    * 匹配任意字符,包括空格,多个字符,单个字符
    ? 匹配任意单个字符
    [xyx] 匹配阔靠内的任意单个字符
    
    ls ./*.txt
    >>> 列出 当前目录下 所有以.txt结尾的文件
    
    ls ./[abc]*.cfg
    >>> 列出 当前目录下 以a或b或c开头,以.cfg结尾的文件
    
    ls ./image?.jpg
    >>> 显示所有 image1.jpg\image2.jpg\...\image9.jpg 文件
    
    ls ./image1[0-9]*.jpg
    >>>  列出 以 image10 \ image11 \...\image19开头,以.jpg结尾的文件
    

    命令别名

    alias 别名='完整命令'
    
    例如:
    alias ll='ls -l'
    
    是 cp\mv\rm等命令交互式地执行并解释执行了哪些操作
    alias cp='cp -iv'
    alias mv='mv -iv'
    alias rm='rm -iv'
    
    查看磁盘使用情况
    
    alias dus='df -h'
    查看所有定义的别名命令
    alias
    不带参数
    
    

    第三章 常用 shell 命令

    ls 列出文件名和目录

    
    ls
    ls -l
    -l 显示全部文件信息:
    第一个字符:-,普通文件 d,文件夹 s,套接字文件 l,链接文件
    后面9个字符: 文件权限,rwx 读r 写w 执行x 分别为 所有者、用户组、其他用户的权限
    
    ls -lh 文件大小显示为KB MB GB 单位
    
    ls -ls 安装文件大小顺序列出文件和文件夹
    
    ls -a 显示所有文件
    
    # 生成文件名变量
    prototxt_file_name=$(ls *.prototxt)
    #.prototxt文件数量
    count=$(grep -c ".prototxt" $prototxt_file_name | wc)
    
    

    cat 显示文件 more less head tail file

    cat 查看文件内容 连接文件 创建一个或多个文件 重定向输出到终端或文件
    
    # 查看文件内容   cat 正序显示   tat 倒序显示文件内容
    cat wyw.txt  / cat -n wyw.txt 显示行号  / cat -b wyw.txt 显示非空白行行号 
    
    cat -e  wyw.txt 会在每行末尾 多显示 $ 符号 (多行内容转换成一行时很有用)
    
    #使用命令行输入创建文件 并连接多个文件
    
    cat >test1
    >>> hello!
    cat >test2
    >>> world!
    cat test1 test2 > test3
    #显示 test3
    cat test3
    >>> 
    hello!
    world!
    
    
    # more 分屏显示文件内容
    more /etc/inittab  / more -10 /etc/inittab 指定一次显示的行号
    
    # less 查看文件速度快 可快速查找关键字
    less /etc/inittab 
    输入 /关键字  然后回车 向后搜索关键字 
         ?关键字  然后回车 向前搜索关键字 
         
    Ctrl+B 向回翻一个窗口的内容 Ctrl+F 向后翻一个窗口的内容 
    
    
    # 显示 文件 头 head  显示 文件尾 tail
    
    head /etc/inittab / head -10 /etc/inittab   显示开头前10行
    tail /etc/inittab / tail -20  /etc/inittab  显示末尾倒数20行
    
    
    # file 文件名 显示文件类型
    
    file /etc/inittab 
    >>> /etc/inittab: ASCII English text
    file -i /etc/inittab 
    

    wc 查看文件统计信息

    wc 文件名
    >>> 行数 单词数 字节数 文件名
    wc -l 文件名  只统计行数
    wc -w 文件名  只统计单词数
    wc -c 文件名  只统计字节数
    wc -L 文件名  统计文件中最长行的长度
    
    

    find 查找文件/目录

    # 查找文件
    
    find ./wanyouwen/*.txt  # 查找 ./wanyouwen 目录下的 txt文件
    find ./wanyouwen -type f -name "*.txt" 
    find ./wanyouwen -type f -perm 0777  查找权限是777的文件
    find ./wanyouwen -type f ! -perm 777  查找权限不是777的文件
    find ./wanyouwen -type f -perm /a+x  查找可执行文件
    
    find ./wanyouwen -type f empty  查找空文件
    
    # 查找文件夹
    find ./ -type d -name wanyouwn
    find ./wanyouwen -type d empty  查找空文件夹(目录)
    
    

    touch 创建文件 mkdir 创建文件夹 cp 复制文件/文件夹 ln -s 创建符号链接文件 mv移动/重命名文件/目录

    # 创建文件
    touch 文件1 文件2 文件3
    touch -c 已有的文件名 只更新 文件时间戳
    touch -m 已有的文件名 只更新 文件的修改时间
    
    # 创建文件夹
    mkdir 文件名1
    mkdir -p 文件名2/文件夹3  递归创建 带有父目录
    
    # 复制文件/文件夹
    cp 文件1 ./xxx/ 复制
    
    # 创建符号链接文件
    ln -s  原地址  目标地址  # 在目标地址创建一个 原地址的快捷链接
    
    # 移动/重命名文件/目录
    mv 原地址文件/目录 新地址文件/目录
    
    # 删除文件/目录
    rm 文件名
    rm -rf 文件夹
    rm *.txt
    rm *[0-9].txt
    

    管理文件或目录权限

    # 显示权限
    ls -l
    # 修改权限
    chmod 777 文件   r(4)  w(2) x(1)
    chmod a+r 文件
    chmod a+w 文件
    chmod a+x 文件
    chmod o+r 文件
    chmod o+w 文件
    chmod o+x 文件
    chmod u+r 文件
    chmod u+w 文件
    chmod u+x 文件
    chmod g+r 文件
    chmod g+w 文件
    chmod g+x 文件
    # 修改所有者 和 用户组
    chown
    chgrp
    # 设置(用户、组)权限位
    setuid
    setgid
    
    

    文本处理

    文本排序 sort

    
    $ cat tep.txt
    abc
    def
    ghi
    def
    $ sort tep.txt  # 将文件内容按字母顺序排序
    abc
    def
    def
    ghi
    $ sort -u tep.txt # 排序 并去除重复的行
    abc
    def
    ghi
    
    $ cat digit.txt
    10
    30
    20
    100
    $ sort -n digit.txt # 按数字大小排序
    10
    20
    30
    100
    $ sort -n -r digit.txt # 按数字大小 倒序 排序
    100
    30
    20
    10
    
    # 多列数字排序
    $ cat  dig.txt
    abc,30
    def,10
    ghi,20
    def,50
    $ sort   dig.txt # 默认按每行的第一列进行排序
    abc,30
    def,10
    def,50
    ghi,20
    
    $ sort -t ',' -k2n,2 dig.txt # 按第二列 数字大小顺序排序 -t 指定分隔符 -k 指定列数
    def,10
    ghi,20
    abc,30
    def,50
    
    $ sort -t ',' -k2nr,2 dig.txt # 按第二列 数字大小倒序排序 -t 指定分隔符 -k 指定列数 r倒序
    def,50
    abc,30
    ghi,20
    def,10
    
    

    文本去重 uniq (unique) 独一无二

    $ cat  tep.txt
    aaa
    aaa
    bbb
    ccc
    ccc
    $ uniq tep.txt  # 去除重复行
    aaa
    bbb
    ccc
    $ uniq -c  tep.txt  # 记录每行出现次数
    2 aaa
    1 bbb
    2 ccc
    $ uniq -d  tep.txt  # 只显示有重复的行,只显示一次
    aaa
    ccc
    $ uniq -D  tep.txt  # 只显示有重复的行,显示所有
    aaa
    aaa
    ccc
    ccc
    $ uniq -u  tep.txt  # 只显示不重复的行
    bbb
    
    $ uniq -w 3 tep.txt  # 限定每行的前3个字符来比较每行是否重复
    $ uniq -f 1 tep.txt  # 跳过每行前1个字符来比较每行是否重复
    

    替换或删除字符 tr

    # 大小写转换
    $ echo linuxShell | tr [:lower:] [:upper:]
    LINUXSHELL
    $  echo linuxShell | tr a-z A-Z  # 功能同上 
    LINUXSHELL
    
    # 替换空格
    $ echo "Hello world" | tr -s [:space:] '\t'
    Hello   world   # 空格 换成 制表符  -s 多个连续的空格算一个
    
    # 删除 字符 -d 选项
    $ echo "Hello world" | tr -d a-z # 删除全部小写字母
    $ echo "Hello world 12345" | tr -d [:digit:] # 删除全部数字
    $ echo "Hello world 12345" | tr -cd [:digit:] # 删除全部数字以外的字符
    

    字符串查找 grep 常用

    grep  关键字 目标文件/目标文件夹/字符串
    grep -r 关键字 目标文件夹   # 递归查找  或者 grep -R 关键字 目标文件夹
    grep -c 关键字 目标文件/目标文件夹/字符串  # 查找出现的次数
    grep -n 关键字 目标文件/目标文件夹/字符串  # 显示行号和对应出现的位置
    
    

    文件比较 diff

    diff 文件1  文件2   # 比较两个文件的差异
    diff -yw 文件1  文件2   # 并排显示两个文件的差异
    

    其他常用命令

    hostname  # 查看主机名
    hostname 新主机名  # 临时修改主机名,下次重启恢复原主机名
    
    who/w   # 列出系统登录用户
    who -b  # 显示系统启动时间
    who -l  # 显示系统登录进程时间
    who -m  # 只显示与当前用户相关的信息
    
    uptime   # 查看系统运行时间
    
    uname    # 查看系统信息,内核名
    uname -r # 内核版本信息
    uname -p # 系统硬件CPU类型
    uname -i # 硬件平台信息
    uname -n # 打印主机名
    uname -a # 显示上述所有信息
    
    #### 获取日期信息 data 
    
    year = $(data +%Y)
    >>> 2019
    year = $(data +%y)
    >>> 19
    mouth = $(data +%m)
    >>> 08
    mouth = $(data +%d)
    >>> 10
    
    $(data +%H)   小时
      
    $(data +%M)  分钟
    
    $(data +%S)  秒
    
    week = 'data +%a' # 星期几
    
    

    第四章 shell命令进阶

    文档处理 和 归档 paste合并文件 dd备份和拷贝文件

    ### paste 合并多个文件的相应行到同一行
    $ cat t.txt
    >>>
    1
    2
    3
    
    $ cat d.txt
    >>>
    a
    b
    c
    
    $ paste t.txt d.txt
    >>>
    1 a
    2 b
    3 c
    
    $ paste -d'|' t.txt d.txt # 指定合并时的分隔符
    1|a
    2|b
    3|c
    
    $ paste -d':,' t.txt d.txt y.txt # 合并多个文件时指定多个分隔符
    
    
    ### 文档复制 dd
    # dd if=输入文件的路径(默认标准输入) of=输出文件的路径(默认标准输出)
    
    # 实例:
    dd if=/dev/sda of=/dev/sdb   #将磁盘/dev/sda 数据复制到 磁盘/dev/sdb
    dd if=/dev/dvd of=dvd.iso    #将磁盘/dev/dvd 数据复制变为一个iso文件
    dd if=/dev/zero of=/dev/sda2 #擦除/dev/sda2分区的数据(格式化)
    
    ### 压缩和归档文件 gzip bzip2
    ### 解压缩文件    gunzip bunzip2
    ### 打包/解包文件  tar -czvf xxx(打包)  tar -xzvf xxx (解包)
    

    监测和管理磁盘

    ### 挂载mount 和 卸载umount 存储介质 到 文件系统某节点
    
    ### df 报告文件系统磁盘空间利用率
    df -a  # 显示所有文件系统信息
    df -h  # 以GB MB 单位来显示文件大小 和 使用率等信息
    df -t  # 显示文件系统类型
    df -m  # 以为块大小单位显示文件系统信息
    
    ### du 评估文件空间利用率
    du -h
    du -sh
    du -h --time # 显示大小和修改时间
    
    

    后台执行命令 cron 大管家 at大将军执行者 &任务发布者

    ###  cron 大管家 
    cron 是定时执行计划任务的守护进程,cron进程会从/etc/init.d 中自动启动。
    cron进程会在目录 /var/spool/cron/crontabs/ 下搜索定时计划任务文件,并将这些定时计划任务载入内存。
    cron进程还会读取 /etc/crontab 以及 /etc/cron.d 下的内容
    cron进程会每分钟唤醒一次,审查所有存储的定时任务,是否按规定执行(大管家)
    
    crontab -l
    >>>60 6 * * 0  /home/xxx/backup  
    # 每周日(0)的6点30分 指向该任务;前5个字段分别为 分钟 小时 日期 月份 星期; * 号表示任意,小时为24小时制。
    
    ###  at大将军执行者 在指定时间执行命令
    
    at noon 在中午12点前 midnight 凌晨12点 teatime下午4点 ...
    
    ### &将任务放在后台执行   指令 &
    
    ### nohup  运行一个对挂起免疫的命令 
    
    

    第二篇 shell 脚本编程

    5. shell 编程基础

    #!/bin/bash  # 第一行,指示行,指定解释器,若没有,则默认使用 /bin/sh作为解释器
    
    ### 单行注释
    # xxxxx代码
    
    ### 多行注释 1
    :<<!
    xxx 代码
    xxxx
    xxxxx
    !
    
    ### 多行注释2
    <<COMMENT
    代码1
    代码2
    ...
    COMMENT
    
    ### 给脚本执行权限
    chmod 777 xxx.sh
    
    ### 将脚本路径当如系统环境变量中可不加路径直接执行
    export PATH=$PATH:/home/wanyouwen/shscrips
    xxx.sh
    
    
    ### 变量进阶
    # 定义变量
    变量名=xxxx
    # 使用变量
    $变量名 或者 ${变量名}
    
    #  字符串修改
    FILENAME=linux_bash.txt
    
    echo ${FILENAME%.*}   # 移除文件名后缀保留文件名 %.*
    >>> linux_bash        
    
    echo ${FILENAME##*.}  # 移除文件名,保留后缀 ##*.
    >>> txt
    
    FILENAMEPATH=home/wanyouwen/linux_bash.txt
    
    echo ${FILENAME%/*}   # 移除文件名保留目录路径 %/*
    >>> home/wanyouwen/
    echo ${FILENAME##*/}   # 移除目录路径保留文件名 ##*/
    >>> linux_bash.txt
    
    ### 字符串长度
    
    ${#变量名}  # 获取变量名指定的字符串长度
    TEX="123456789a"
    ${#TEX}
    >>> 10
    
    ### 获取子字符串
    #{变量名:起点:长度}   索引从0开始
    ${TEX:3:4}
    >>> 4567
    
    #### bash 脚本参数
    ./xxx.bash  参数1  参数2 参数3 参数4
    
    param1=$1
    param2=$2
    param3=$3
    param4=$4
    
    
    #### declare 指定变量类型
    declare -r var=1   # 设定只读变量 var 其值为1
    var=2              # 只读变量不能被修改,会报错
    declare -i 变量    # 指定变量为整数型变量
    
    declare -a 变量    # 声明数组变量
    declare -a linux={'ubuntu','redhat'}
    
    简单数组定义
    linux=()
    赋值
    linux[0]='ubuntu'
    linux[1]='redhat'
    
    # 获取数组变量元素
    echo ${linux[@]}  或者 echo ${linux[*]}  # 索引编号 @/* 代表所有元素
    >>> ubuntu redhat
    echo ${linux[0]}
    >>> ubuntu
    echo ${linux}    # 数组名指代第一个元素
    >>> ubuntu
    
    

    shell 算数运算

    id++  id--  变量后递增和后递减
    ++id  --id  变量前递增和前递减
    - 单目 负号
    = 单目 正号
    +
    ! 逻辑反  ~按位取反
    ** 求幂
    * 乘  /除 %取余 +加 -减
    << 按位左移   >> 按位右移
    <=  >= <>  小于等于 大于等于 不等于
    & 按位与
    ^ 按位异或
    | 按位或
    && 逻辑与
    || 逻辑或
    
    expr?值1:值2
    
    
    
    10   普通数字开头 十进制数
    020  0数字开头为  八进制数
    0x30 0x开头为     十六进制数
    
    2#111 #前面指定进制数  2进制数
    32#20 #32进制数
    
    
    ##### 64 进制数   
    let base64=64#@_
    64进制数,0~9;a~z;A~Z;@ _
    @表示62
    _表示63
    
    

    6. shell 的条件执行

    ### test 测试文件属性 字符串测试 算术测试
    
    ### if 条件语句
    if [ $变量 == $变量2 ]
    then
       xxxx
    else 
       xxxx
    fi
    
    if [ $变量 == $变量2 ]    
    then
       xxxx
    elif [ $变量 -gt $变量2 ]      ### -gt大于-ge大于等于 -eq等于 -ne不等于 -lt小于 -le小于等于
    then
       xxxx
    else
       xxxx
    fi
    
    ### 查看脚本的命令行参数数量 ###################
    
    if [ $# -ne 1 ]; then
         echo "usage: $0 param1"
         exit 1
    fi
    
    num=$1 # 获取第一个命令行参数
    
    if [ $num -ge 90 ] && [ $num -le 100 ]  
    # 多条件 与&& (-a 也表示与 and   或|| (-o 也表示或 or) 逻辑非!
    then
       echo " 90 <= num <= 100"
    fi
    
    if [ ! -f xxx.txt ]; then echo " xxx.txt not exit "; fi
    
    -d 路径存不存在  
    
    

    case 多分支

    if [ $# -lt 2 ]
    then
       echo "usage: $0 param1 param2 "
    fi
    
    # 多case语句
    case "$1" in
    1)
      xxxx
    ;;  # 1)分支结束 必须要两个;来结束
    2)
      xxxx
    ;;
    3) 
      xxxxx
    ;;
    4 | 5 | 6)    # 多重case 匹配
       XXXXX
    ;;
    esac  # 结束case语句
      
    

    7. bash 循环

    7.1 for 循环

    for 变量 in  列表
    do
     ...
    done
    
    # 例如
    param="1 2 3 4 5 6 7 8 9 10"
    for num in $param
    do
       echo $num
    done
    
    for i in 1 2 3
    do
    ...
    done
    
    for s in aa bb cc dd
    do
    ...
    done
    
    
    for (( i = 0; i < 3; i++ ))
    do
       for (( j = 0; j < 5; j++ ))
       do
         ...
       done
       ...
    done
    
    

    7.2 while循环

    while [ $var -le 3 ]
    do
      var=$(( var + 1)) # 变量自加1
    done
    
    
    # while  和 read  读取文件
    
    while read -r line
    do
       echo $line
    done < "$file_name"
    
    
    # 读取文件 成 多列
    
    while read -r col1 col2 col3   # 每一行分成三列
    do
       echo $col1 $col2 $col3
    done < "$file_name"
    
    # 无限循环
    
    while :
    do
    ...
    sleep 3
    done
    
    while true
    do
    ...
    done
    
    

    7.3 until循环 与 while类似 只不过 在条件为假时执行

    7.4 select循环

    7.5 循环控制 break 和 continue

    break 跳出整个循环,退出循环

    continue 跳过当前次循环,执行下一次循环

    8. shell 函数

    # 格式1
    function_name()
    {
    # 函数体
    # 返回值 可选
    return int
    }
    
    # 格式2
    function function_name()
    {
    # 函数体
    }
    
    # 格式3
    function function_name
    {
    # 函数体
    local xxx  #函数内部变量
    }
    
    # 函数放在后台运行
    function_name &
    
    

    函数参数

    fname()
    {
    # 获取函数参数
    func_name=$0  # 函数名
    arg1=$1
    arg2=$2
    # 函数参数总数
    arg_num=$#
    # $* / $@ 所有参数
    
    # 以上同脚本的参数获取和统计方法
    # 关于参数的语句
    
    # 遍历所有参数
    for  arg  in $* ; do 
    ...
    done
    }
    

    调用函数 并传递参数给函数

    fname foo bar

    函数名 参数1 ($1) 参数2 ($2)

    9. 正则表达式

    10. 脚本输入处理

    11. shell重定向

    12. 管道和过滤器

    13. 捕获

    14. sed 和 awk 文本分析修改

    15. 其他

    感谢您的支持,我会继续努力分享更高质量的博文

    展开全文
  • Linux ShellShell 打印命令

    千次阅读 2015-10-02 10:03:03
    echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串。命令格式:echo arg 您可以使用echo实现更复杂的输出格式控制。 显示转义字符 "echo "\"It is a test\"" 结果将是: "It is a test"双引号也可以省略。...

    1、echo 命令

    echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串。命令格式:

    echo arg
    您可以使用echo实现更复杂的输出格式控制。
    
    ----------
    显示转义字符
    "echo "\"It is a test\""
    结果将是:
    "It is a test"
    双引号也可以省略。 
    ----------
    显示变量
    name="OK"
    echo "$name It is a test"
    结果将是:
    OK It is a test
    
    同样双引号也可以省略。
    
    如果变量与其它字符相连的话,需要使用大括号({ }): 
    mouth=8
    echo "${mouth}-1-2009"
    结果将是:
    8-1-2009 
    ----------
    显示换行
    echo "OK!\n"
    echo "It is a test"
    输出:
    OK!
    It is a test 
    
    ----------
    显示不换行
    echo "OK!\c"
    echo "It is a test"
    输出:
    OK!It si a test 
    
    
    ----------
    显示结果重定向至文件
    echo "It is a test" > myfile
    原样输出字符串
    若需要原样输出字符串(不进行转义),请使用单引号。例如: 
    echo '$name\"'显示命令执行结果
    echo `date`结果将显示当前日期

    2、printf 命令

    printf 命令用于格式化输出, 是echo命令的增强版。它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同。

    注意:printf 由 POSIX 标准所定义,移植性要比 echo 好。

    如同 echo 命令,printf 命令也可以输出简单的字符串:

    $printf "Hello, Shell\n"
    Hello, Shell
    $

    printf 不像 echo 那样会自动换行,必须显式添加换行符(\n)。

    printf 命令的语法:
    printf format-string [arguments…]
    format-string 为格式控制字符串,arguments 为参数列表。

    printf()在C语言入门教程中已经讲到,功能和用法与 printf 命令类似,请查看:C语言格式输出函数printf()详解

    这里仅说明与C语言printf()函数的不同:
    printf 命令不用加括号
    format-string 可以没有引号,但最好加上,单引号双引号均可。
    参数多于格式控制符(%)时,format-string 可以重用,可以将所有参数都转换。
    arguments 使用空格分隔,不用逗号。

    # format-string为双引号
    $ printf "%d %s\n" 1 "abc"
    1 abc
    # 单引号与双引号效果一样 
    $ printf '%d %s\n' 1 "abc" 
    1 abc
    # 没有引号也可以输出
    $ printf %s abcdef
    abcdef
    # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
    $ printf %s abc def
    abcdef
    $ printf "%s\n" abc def
    abc
    def
    $ printf "%s %s %s\n" a b c d e f g h i j
    a b c
    d e f
    g h i
    j
    # 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
    $ printf "%s and %d \n" 
    and 0
    # 如果以 %d 的格式来显示字符串,那么会有警告,提示无效的数字,此时默认置为 0
    $ printf "The first program always prints'%s,%d\n'" Hello Shell
    -bash: printf: Shell: invalid number
    The first program always prints 'Hello,0'
    $
    展开全文
  • Linux中编写Shell脚本

    万次阅读 多人点赞 2018-10-08 11:22:35
    Shell脚本的执行 Shell脚本编写规范 Shell 中的变量 变量的算术运算 双小括号 (()) 数值运算命令的用法 let 运算命令的用法 expr 命令的用法 br 命令的用法 $[]符号的运算示例 Shell脚本的条件测试 几种...
    展开全文
  • Linux脚本Shell命令

    2011-02-24 22:51:00
    本文详细讲解linux脚本Shell命令基本知识,包括:1 开头2 注释3 变量4 环境变量5 linux脚本Shell命令和流程控制等五方面内容。

    在向大家详细介绍linux编译之前,首先让大家了解下Linux脚本Shell命令。然后讲解在shell脚本中可以使用任意的unix命令。

    语法基本介绍

    1.开头

    程序必须以下面的行开始(必须方在文件的第一行):
    #!/bin/bash
    符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/bash来执行程序。
    当编辑好脚本时,如果要执行该脚本,还必须使其可执行。
    要使脚本可执行:
    编译 chmod +x filename 这样才能用./filename 来运行

    或者使用:  sh filename 运行。

    2.注释

    在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。

    3.变量

    在其他编程语言中您必须使用变量。在linux脚本shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:
    #!/bin/sh
    #对变量赋值:
    a="hello world"
    # 现在打印变量a的内容:
    echo "A is:"
    echo $a
    有时候变量名很容易与其他文字混淆,比如:
    num=2
    echo "this is the $numnd"
    这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
    num=2
    echo "this is the ${num}nd"
    这将打印: this is the 2nd

    4 环境变量

    由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。

    5 linux脚本Shell命令和流程控制

    在shell脚本中可以使用命令:
    Unix 命令:
    虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。常用命令语法及功能
    ◆echo "some text": 将文字内容打印在屏幕上
    ◆ls: 文件列表
    ◆wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数
    ◆cp sourcefile destfile: 文件拷贝
    ◆mv oldname newname : 重命名文件或移动文件
    ◆rm file: 删除文件
    ◆grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt
    ◆cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令
    ◆cat file.txt: 输出文件内容到标准输出设备(屏幕)上
    ◆somefile: 得到文件类型
    ◆read var: 提示用户输入,并将输入赋值给变量
    ◆sort file.txt: 对file.txt文件中的行进行排序
    ◆uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq
    ◆expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3
    ◆find: 搜索文件比如:根据文件名搜索find . -name filename -print
    ◆tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile
    ◆basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux
    ◆dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin
    ◆head file: 打印文本文件开头几行
    ◆tail file : 打印文本文件末尾几行
    ◆sed: Sed是一个基本的查找替换程序。

    可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。比如:将linuxfocus 替换为LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.fileawk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令输出结果为:Adam Bor, IndiaKerry Miller, USA。以上讲解的是linux脚本Shell命令

     

     

    本文转自:http://os.51cto.com/art/200910/158857.htm

    展开全文
  • 在编写脚本函数时,我们有时候会用到很多特殊的命令,但有时我们不确定这些命令是否存在,所以这就需要我们在使用这些命令时先判断这些命令是否存在,在linux里面,which命令可以判断一个可执行命令是否存在,如果...
  • Linux中,周期执行的任务一般由cron这个守护进程来处理 ps -ef | grep cron  cron读取一个或多个配置文件,这些配置文件中...一、 cron在3个地方查找配置文件(设置shell脚本): 1、/var/spool/cron/yanggang 这个
  • Linux shell打印命令

    千次阅读 2016-12-27 22:23:57
    echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串。命令格式: echo arg 您可以使用echo实现更复杂的输出格式控制。 ---------- 显示转义字符 "echo "\"It is a test\"" 结果将是: "It ...
  • -v一边执行脚本,一边将执行过的脚本命令打印到标准输出端 -x提供跟踪执行信息,将执行的每一条命令和结果一次打印出来 这应该就像C语言的gdb一样有用吧,有助于检查错误 使用这些选项有三种方法 1.在命令行提供参数...
  • java操作Linux 调用shell命令shell脚本

    千次阅读 2019-06-17 06:09:56
    由于两个模型都是在终端执行,于是考虑用java代码直接调起终端,然后让终端执行指定的shell命令,测试代码如第二节; 由于模型的启动模型在不同的项目路径下,这种情况下指令需要好几条,有点...
  • Linux Shell - Shell脚本调试技术

    千次阅读 2014-01-13 23:55:26
    Shell脚本调试技术 本文全面系统地介绍了shell脚本调试技术,包括使用echo, tee, trap等命令输出关键信息,跟踪变量的值,在脚本中植入调试钩子,使用“-n”选项进行shell脚本的语法检查, 使用“-x”选项实现shell...
  • linux/unix shell l脚本调试方法 Shell提供了一些用于调试脚本的选项,如下所示: -n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误 -v 一边执行脚本,一边将执行过的脚本命令打印到标准错误输出 -x 提供...
  • 在该存储库的第一部分中,您可以找到几乎所有与linux命令相关的示例,在第二部分中,您将找到与Shell编程相关的所有示例。 Linux命令 有用Linux命令 有多少用户登录: who 当前用户是谁: whoami 打印日期: date...
  • Linux Shell 脚本编程(8)—文本过滤(awk命令)文本过滤 正则表达式 —Linux Shell 脚本编程(5)—文本过滤(正则表达式) grep 命令Linux Shell 脚本编程(6)—文本过滤(grep命令) find命令Linux ...
  • 本地cmd命令, 输入命令, 并在控制台输出命令执行结果 jsch 远程ssh到linux服务器, 执行结果并显示输出
  • linux shell脚本打印当前执行的命令

    千次阅读 2012-08-15 17:19:32
    http://serverfault.com/questions/16204/how-to-make-bash-scripts-print-out-every-command-before-it-executes   很简单,如下脚本: #!/bin/bash set x ... 即可完成所执行命令打印。...
  • Linux Shell 脚本编程(9)—文本过滤(sed命令)文本过滤 正则表达式 —Linux Shell 脚本编程(5)—文本过滤(正则表达式) grep 命令Linux Shell 脚本编程(6)—文本过滤(grep命令) find命令Linux ...
  • linux shell命令通常可以通过-h或--help来打印帮助说明,或者通过man命令来查看帮助,有时候我们也会给自己的程序写简单的帮助说明,其实帮助说明格式是有规律可循的 帮助示例 下面是git reset命令的帮助说明,通过...
  • Linuxshell脚本中的read命令

    千次阅读 2016-09-01 10:27:09
    Linuxshell脚本中的read命令的作用是从标准输入中读取一行,并把输入行的每个字段的值指定给shell变量,在shell脚本中使用read命令时可以带多个不同的参数。
  • Linux内建命令 - Shell脚本编程实践

    千次阅读 2020-06-14 23:10:19
    Linux内建命令1.如何确定内建命令:type2.执行程序:“.”(点号)3.别名:aliasalias4.删除别名:unalias5.任务前后台切换:bg、fg、jobs6.改变目录:cd7.声明变量:declare、typeset8.打印字符:echo9.跳出循环:...
  • [Linux]Linux Shell脚本参数传递

    千次阅读 2016-09-17 00:53:43
    1. shell脚本的默认变量下面用一个shell脚本来描述shell脚本的默认变量[ouyangyewei@localhost workspace]$ cat learn_argument.sh #! /bin/bash# # check arguments # #----------------- if [ $# -lt 3 ] then ...
  • 有些shell脚本或者命令,只有在规定时间内运行完成才有意义,这时可以设置脚本/命令的时间限制,如果在设定时间内,还没有完成,则终止命令/脚本。可以使用timeout命令来做到,先看一下它的用法: $ man timeout ...
  • Linux Shell 脚本编程(5)—文本过滤(grep命令)文本过滤 正则表达式 Linux Shell 脚本编程(5)—文本过滤(正则表达式) grep 命令 Linux Shell 脚本编程(5)—文本过滤(grep命令) find awk sed 合并...
  • Linux shell 脚本

    千次阅读 2007-06-02 13:04:00
    Linux shell 脚本 最近在学习Linux Shell脚本相关知识,找到
  • linux shell 命令

    千次阅读 2014-05-19 19:28:48
    linux shell 命令 ...Shell 脚本语言加上linux 命令语句就构成了shell程序。优点在于批量处理、不用用户每次手动输入。 bash是shell程序解释器的一种。   常用命令 pwd:print working directory,打印
  • linux-shell脚本命令之awk

    千次阅读 2014-05-18 00:36:46
    -v 定义变量, 从shell给awk传递变量, 如-vDATE=$DATE, 即将shell中$DATE变量值传递给awk变量DATE。 -f progfile:允许awk调用并执行progfile程序文件,当然progfile必须是一个符合awk语法的程序文件。 ...
  • 今天小编就为大家分享一篇关于Android之在linux终端执行shell脚本直接打印当前运行app的日志的实现方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • Linux Shell脚本编程--awk命令详解

    万次阅读 2013-08-02 22:42:02
    awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 。     详细介绍: AWK命令介绍   awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息后,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,403
精华内容 26,961
关键字:

linuxshell打印命令脚本

linux 订阅