linux shell编程

来源:互联网 发布:进气压力传感器数据值 编辑:程序博客网 时间:2024/04/30 11:10

主要用于系统管理 自动化管理脚本

自定义变量

变量默认都是string类型定义变量=两边不能有空格例:x=4name="test 1"变量调用调用时开头需要加$符号 echo $x变量查看set [选项]     -u 未声明变量报错变量删除unset [变量名](变量名不加$)

环境变量

设置环境变量export 变量名=变量值或变量名=变量值export 变量名env 查看环境变量unset 变量名 删除(变量名不加$)常见环境变量PATH变量 系统查找命令的路径echo $PATH 查看临时生效PATH="$PATH":/apps/sh   增加PATH变量值(变量叠加)

位置参数变量

$n n为数字 $0代表命令本身 $1-$9代表第一到第九个参数,十以上${10}$* 返回命令行中所有参数 参数看成一个整体$@ 返回命令行中所有参数 每个参数区别对待$# 返回命令行中参数的个数

预定义变量

$? 最后一次执行的命令的返回状态 0 表示执行正确 非0 命令作者自定$$ 当前进程的ID号(PID)$! 后台运行的最后一个进程的ID号(PID)

接收键盘输入
read [选项] [变量名]
选项:

    -p 提示信息 : 在等待read输入时,提示信息    -t 秒数:    read命令会一直等待用户输入,此项指定等待时间    -n 字符数:    read命令只接受指定的字符数,就会执行    -s            隐藏输入数据

shell运算符

1.declare 声明变量类型declare[+/-][选项] 变量名    - 给变量设定类型属性    + 取消变量的类型属性    -a 将变量声明为数组型    -i 整型    -x 环境变量    -r 只读变量 不能修改和删除    -p 显示指定变量的被声明的类型    例:b=1        c=2        declare -i a=$b+$c        echo $a        declare -p a声明数组变量    arr[0]=a    arr[1]=a1    arr[2]=a2    declare -a arr[3]=a3 //两种声明方式    echo ${arr}       默认第一个下标的值    echo ${arr[2]} 下标为2的值    echo ${arr[*]} 所有2.数值运算的方法expr或let运算工具    例: aa=11         bb=22         cc=$(expr $aa + $bb) (注:左右两侧必须有空格)         let cc=$aa+$bb$((运算式)) 或 $[运算式]    例:$(($aa + $bb))          $[$aa + $bb]  

环境变量配置文件

重新加载配置文件source 配置文件 或. 配置文件配置文件位置/etc/profile            登录成功配置文件 设置基本环境变量 调用/etc/profile.d/*.sh 调用~/.bash_profile/etc/profile.d/*.sh     启动/etc/profile.d/*.sh 下shell脚本 (加载语言)~/.bash_profile         调用~/.bashrc  加载用户bin目录 环境变量~/.bashrc              设置别名    /etc/bashrc             设置ps1 判断是否登录执行shell 调用/etc/profile.d/*.sh根据顺序加载配置文件~/.bash_logout         注销时生效的环境变量配置(默认是空的)~/.bash_history            历史命令保存文件(退出登录后才把当次登录记录写入文件)/etc/issue              本地终端登录提示信息/etc/issue.net          远程终端提示信息(由ssh配置文件/etc/ssh/sshd_config决定是否显示,加入"Banner /etc/issue.net"才能显示,需要重启ssh服务)/etc/motd               登录后提示信息注:~用户家目录下 对当前用户生效    /etc/下的文件 对所有用户生效

正则表达式

通配符    * 匹配任意字符    ?匹配任意一个字符    [] 匹配中括号内的一个字符基础正则    * 前一个字符匹配0次或多次     grep "aa*" test.log    . 匹配除了换行符外任意的一个字符     ^ 行首  grep "^aa$" test.log    $ 行尾    [] 匹配括号中指定的任意一个字符,只匹配一个字符 [^a-zA-Z0-9] [^]取反    \ 转译符    \{n\} 重复出现n次    \{n,\} 最少匹配n次    \{n,m\} 最少匹配n次到m次grep 行提取命令    -v 取反    例:grep "正则" 文件名        ps -ef | grep "正则"  管道符cut  列提取命令    -f 列号: 提取第几列    -d 分隔符: 按照指定分隔符分割(默认制表符)    例:cut -f 2 test.log 截取第二列        cut -f 2,4 -d ":" test.log 以":"分割截取第二列和第四列    限制: 需要分隔符,文件需要一定格式printf     格式化输出命令    printf '输出类型输出格式' 输出内容        输出类型            %ns 输出字符串。n指代输出n个字符            %ni 输出整数。            %m.nf 输出浮点数 m和n是数字,指代输出整数位和小数位 例:%8.2f 输出8位 其中2位小数,6位整数        输出格式            \a 输出警告声音            \b 输出退格键(backspace键)            \f 清除屏幕            \n 换行            \r 回车            \t 水平输出退格键(tab键)            \v 垂直输出退格键(tab键)        例:printf '%s\t%s\t%s\n'  1 2 3 4 5 6 7 8 9              printf '%s' $(cat test.log)awk 字符串截取    awk '条件1{动作1}条件2{动作2}...' 文件名    例:awk '{printf $2 "\t" $4 "\n"}' test.log   ($2表示第二列 $4表示第四列,没有条件直接执行)         df -h | awk '{print $5}'    BEGIN    END    cat /etc/password | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}'sed 字符串替换    sed [选项] '[动作]' 文件名        选项:            -n 把经过sed命令的处理的行输出到屏幕            -e 允许输出多条sed命令编辑            -i 修改结果直接修改文件,而不是由屏幕输出(必须加-i 才能修改)        动作:            a 追加            c 行替换            i 插入            d 删除            p 打印            s 字符串替换    例:sed -n '2p' test.log 打印输出第二行        sed -i '2,4d' test.log 删除2到4行        sed -e '2,4d;s/aa/bb' test.log 删除2到4行 并 将全文aa替换成bb        sed '2a test' test.log 第二行追加test字符        sed '2i test' test.log 第二行前面插入test字符        sed '2c test' test.log 第二行替换test        sed '2s/aa/sb/g' test.log 第二行替换aa替换成sbsort 排序命令           sort [选项] 文件名        选项:            -f 忽略大小写            -n 以数值型排序,默认使用字符串型            -r 反向排序            -t 指定分隔符,默认是制表符            -k n[,m] 按照指定的字段范围排序 第n个字段开始 m字段结束(默认到行尾)    例:sort /etc/passwd   按开头字母a-z排序        sort -r /etc/passwd   按开头字母z-a排序        sort -n -t ":" -k 3,3 /etc/passwd  根据:分隔符从第3个字段按数值排序 wc 统计命令     wc [选项] 文件名        选项:            -l 只统计行数            -w 只统计单词书            -m 只统计字符数    例: wc test.log

条件判断与流程控制

文件类型判断    -d 文件 判断文件是否为目录    -e 文件 判断文件是否存在    -f 文件 判断文件是否为普通文件    -r 文件 判断文件是否有读权限    -w 文件 判断文件是否有写权限    -x 文件   判断文件是否有执行权限    文件1 -nt 文件2 判断文件1的修改时间是否比文件2新    文件1 -ot 文件2 判断文件1的修改时间是否比文件2旧    文件1 -ef 文件2 文件1和文件2inode号一致,判断文件1和文件2是否为同一个文件例: [ -d /apps/test ] && echo yes || echo no字符串判断    -z 字符串 判断字符串是否为空    -n 字符串 判断字符串是否非空    字符串1 == 字符串2 判断字符串是否相等    字符串1 != 字符串2 判断字符串是否不相等多重判断    条件1 -a 条件2 逻辑与    条件1 -o 条件2 逻辑或    !条件  条件取反if 语句    if [ 条件表达 ];then        程序    fi    或者    if [ 条件判断 ]        then            程序    elif [ 条件判断 ]        then            程序    else            程序    ficase 语句    case $变量名 in        "值1")            程序1            ;;        "值2")            程序2            ;;          *)            default程序            ;;    esacfor 循环    for 变量 in 值1 值2 值3        do            程序        done    或    for ((初始值;循环控制条件;变量变化))        do            程序        donewhile 循环    while [ 条件判断 ]        do            程序        done    until 循环(与while相反 条件成立终止循环)    until [ 条件判断 ]    do        程序    done        
原创粉丝点击