linux shell编程

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

自定义变量

变量默认都是string类型
定义变量=两边不能有空格
例:
x=4
name="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替换成sb

sort 排序命令       
    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
            程序
    fi

case 语句
    case $变量名 in
        "值1")
            程序1
            ;;
        "值2")
            程序2
            ;;  
        *)
            default程序
            ;;
    esac

for 循环
    for 变量 in 值1 值2 值3
        do
            程序
        done
    或
    for ((初始值;循环控制条件;变量变化))
        do
            程序
        done

while 循环
    while [ 条件判断 ]
        do
            程序
        done    

until 循环(与while相反 条件成立终止循环)
    until [ 条件判断 ]
    do
        程序
    done        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值