MAC开发之终端,脚本命令(terminal,shell)

本文介绍了MAC开发环境中终端快捷键和常用Shell命令,包括移动、删除、历史命令、Linux命令如ls、cat、find、less、sort、uniq、cut等,以及文本处理工具如tr、paste、awk。还讲解了文件处理、进程查看、脚本编写基础知识,如tar、cron、vi/vim编辑器的使用,并提供了多个实用操作示例。

#快捷键
    移动
    ctrl+a     命令行首
    ctrl+e     命令行尾
    ctrl+b     向后
    ctrl+f     向前

    删除
    ctrl+w     删除到行首
    ctrl+k     删除到行尾
    ctrl+u     删除光标前整个命令行字符
    ctrl+h     向行首删除一个字符
    ctrl+d     向行尾删除一个字符

    ctrl+p     上一个历史命令
    ctrl+n     下一个命令

    ctrl+m     enter
    ctrl+i     tab

    esc3次  显示所有命令
    ctrl+[  esc

shell里面可以有linux命令
不是所有的linux命令都可以使用在shell中


#linux命令

ls

    -a
    -l
    -t     按照时间降序
    -r     升序


cat

    -n
    
    如何清空一个文件
        使用vim工具
        echo > filename
        cat /dev/null >filename

find

    -i

    -amin过去几分钟被读取过
    -atime过去几天被读取过
    -cmin过去几分钟被修改过
    -ctime过去几天被修改过

    -name
    -type
    -size


less

    y前一行
    u前半页
    enter后一行
    space后一页

    q/ZZ

cat
    
    cat filename | sort | uniq

sort
    
    -n 数字
    -u 去掉重复数字
    -r 倒序
    -t 指定分隔符
    -o 输出到指定文件中
    -k 指定排序的列
     
uniq

    -u     显示唯一的行
    -d  显示重复的行
    -c     去重并统计重复次数

cut 

    cat /etc/passwd | cut -f 1,6-7 -d ':' 打印所有用户和用户的家目录

    -c     打印指定字符


tr文本转换
    

paste文本合并

    -d指定分隔符


ps当前查询状态下进程瞬间的状态信息
    
    pidof 查看pid


top动态查看进程


head
    
    -n     指定开始number行

tail

    -c     指定字符开始位置
    -n     
        number    指定最后number行
        +number    从指定行到最后


    -f     监视文件增长

**ex.显示100行到300行**
    cat filename | tail -n +100 | head -n 200 
    sed -n 100,300p


wc
    
    文件行数    字数    字节数

    -l
    -w
    -c     字符数

    统计文件夹下的目录个数
    ls -l ./ | grep "^-" | wc -l
    统计文件夹下的文件个数
    ls -l ./ | grep "^d" | wc -l

统计命令执行时间

    time
        real    实际使用时间
        user    用户态使用时间
        sys        内核态使用时间

        read>user+sys    需要io操作,再次操作时间变短,是因为有缓存

    -p     只显示时间数值(秒数),没有单位


tar 

    -zcvf     压缩
    -zxvf    解压


定时任务

    at执行一次
    atq
    atrm
    \\
        at now + 30 minutes
        /sbin/shutdown-h down
        ctrl + d 结束


    cron周期性执行
        * * * * *

vi

    /向下查找
    ?向上查找 n向上,N向下
    :1,$s/oldText/newText/g替换

    dw     删除一个单词
    de 
    d$    删除一行
    2w    移动两个单词
    3e    移动三个单词尾


 
sed行

    's/old/new/g'    字符串替换
    's/old/&new/g'    在匹配的内容后添加

    默认不保存修改后的文件,使用重定向或者 -i或者 '-n 1,2 w output'
    n,mp     打印n,m行
    -n '1,5'    打印1到5行

    '1,5d'         删除1到5行
    '5!d'        保留第5行
    n,$d     删除n,最后一行
    /^$/d         删除所有空行
    
    -e 或者 ;        多重编辑

    's/old/new/g'    字符串替换
    'y/old/new'    字符替换
    '2 i test'    在第二行之前插入
    '2 a test'    在第二行之后插入
    r             从其他文件读取后插入匹配行
    p             只显示匹配的行或处理过的行


    sed.rules
    sed -f sed.rules filename


awk列

    'print $1,$4'     打印第一列和第四列
    'print $0'        打印所有列
    'print NF'        打印列数
    $NF             打印最后一列

    'begin{total=0}{total+=$3}end{print total}'                                打印第三列的列和
    'begin{total=0}{total+=$3}end{print total/NR}'                            打印第三列的平均值
    sed '/^$/d' filename | awk 'NR==1{a=$1;next} {a=a<$1?a:$1}END{print a}' 打印最小值
    sed '/^$/d' awk.sh | awk 'NR==1{a=$1;next} {b=b>$1?b:$1}END{print b}'     打印最大值

统计整体磁盘情况
    df -h
    查看文件夹大小
    du -sh

#shell
    
    解释型语言,每执行一次都要翻译一次,相对于编译型语言,效率较低

    #!     Shebang 幻数 指定解释器的绝对路径
    #AUTHOR
    #DATE

    查看脚本默认解释器
    echo $SHELL
    grep root /etc/passwd

    当前linux系统可用的shell
    /etc/shells

    执行shell脚本
    sh test.sh
    bash test.sh
    zsh test.sh
    在当前shell环境下执行
    source
    直接指定解释器运行
        /bin/bash test.sh
    作为可执行程序
        chmod +x test.sh     执行./test.sh 使用全路径执行需要x权限
        


    #单行注释
    <<!
    多行注释1
    !

    <<test
    多行注释2
    test

    if false;then
    多行注释3
    fi

    ((0)) && {

    多行注释4

    }

引用

    双引号"    弱引号/部分引用 $,`,\会被解析为特殊意义
    单引号'    全引用

命令替换

    ``或$()

    $?    取出之前命令的退出状态值

位置参数

    $0 脚本名称
    $1 第一个参数
    $2
    .
    .
    $N 第N个参数
    $# 参数个数
    $@/$* 所有参数
    

运算符

    整数
    $[]    $(())
    expr    操作符和操作数之间要有空格

算术运算符

    关系运算符
    []中使用         [[]]中使用
    -gt             >
    -ge             >=
    -lt                <
    -le             <=
    -ne             !=
    -eq             =


    字符串比较运算符
    -z 是否为空
    -n 是否不为空

    文件测试运算符
    -r
    -w
    -x
    -b
    -c
    -d
    -f
    -s     文件是否为空
    -e     是否存在

    逻辑运算符
    test和[]等同
        []中使用         [[]]中使用
        -a                 &&
        -o                 ||
        !                 !

##内建命令

declare
        -i 整数
        -r 只读    readonly
        -a 数组


echo打印字符

    -n     不换行
    -e  打印转义字符
    

    -e     输出颜色
        背景颜色范围 40-47
        字体颜色范围 30-37    黑红绿黄蓝紫天蓝白

exec

    列出所有文件
        find / -name "*.conf" -exec ls -l {} \;
    删除所有临时文件
        find / -name "*.tmp" -exec rm -f {}    \;
    
read

    不指定变量,放入环境变量$REPLY


数组

    声明
    declare -a arr
        arr[0]=test1
        arr[1]=test2
    arr=('test1','test2')

    取值
    ${arr[0]}
    ${arr[@]}/${arr[*]}

    
    ${#arr[0]}    获取字符串元素的长度

    
    ${arr[@]:1:2}    截取第一二个元素
    ${arr[0]:1:2}    截取第一个元素的第一二个字符


    (${#arr1[@]} ${#arr2[@]})    连接两个数组

    ${#arr[@]}/test1/test2        替换数组内元素

    unset        取消


判断
    if []
    then
    else
    fi


    if []
    then
    elif
    then
    else
    fi

    fi结尾

循环

    带列表的循环
    for var in {1..100} / for var in `seq 1 100` / for var in $(seq 1 100)
    do

    done

    seq 命令定义步长
        for var in $(seq 1 2 100)


    不带列表的循环 在运行脚本时通过参数的方式传递变量
    for var / for var $@

    类c的for循环
        for((初始化;判断;变量修改))
        for((i=1; i<=100;i++))


    while
        

    


    select var in test1 test2
    do
        case $var in 
        test1)    ***;;
        test2)    ***;;
        *)        ***;;
        esac
    done

函数

    set可以重置参数的值
    shift移动位置参数
        ex.计算脚本中所有参数的和


    库函数
        函数名以下划线开头

    递归
        bash -x 跟踪脚本运行细节

    标准输入0
    标准输出1
    错误输出2

    标准输出重定向     command > filename     command 1> filename     
    标准错误重定向     command 2> filename 

    输出重定向到空设备文件    >/dev/null

    标准输出和标准错误输出同时重定向     command >filename 2>filename
                                    command >filename 2>&1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值