欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > shell脚本复习笔记

shell脚本复习笔记

2025/7/6 5:20:00 来源:https://blog.csdn.net/txz2629310036/article/details/145050831  浏览:    关键词:shell脚本复习笔记

shell简化操作步骤

//输出重定向:> --- 覆盖写   >> --- 追加写

//隐藏屏幕上的输出结果:
向/dev/null文件中写入


//两种执行方式:
第一种:创建并编辑脚本,chmod改执行权限,./xxx.sh运行
第二种:调用bash,bash xxx.sh


//多命令执行顺序:
;分割 ---- 多个命令顺序执行
&&分割 ---- cmd1 && cmd2 (当cmd1正确执行后,cmd2执行;否则cmd2不执行)
||分割 --- cmd1 || cmd2 (当cmd1执行不正确时,cmd2才会执行;cmd1正确执行时,cmd2不会执行)

//shell变量: --- 一个脚本周期内,其值可以发生改变的量就是变量
    //命名规则:
        由数字、字母、下划线组成,不能由数字开头
        
    //相关符号:
        ''单引号,在其中特殊字符字符会原样输出,不会有特殊含义
        ""双引号,在其中除"$"、"`"、"\",取值、引用、转义;其他字符都不会有特殊含义
        

    //变量的自定义:
        1.用户自定义变量:
            变量定义:不能数字开头,等号两边不能有空格,变量的值有空格必须要用引号包含
                2name="ni hao"   ----x
                name = "nihao"   ----x
                name=ni hao      ----x
                name="ni hao"    ----v
            变量的调用:$变量 --- 取变量值
            
            删除变量:unset 变量名
        2.环境变量
            环境变量声明:export 变量=变量值
        3.位置参数
            $N --- 表示脚本的第n个参数,$0表示当前脚本程序的名称
            $* --- 表示命令行中的所有参数,$将所有参数看成一个整体
            $@ --- 表示命令行中的所有参数,$将所有参数分开看待
            $# --- 表示命令行中的参数个数
            
        4.预定义变量
            $? --- 最后一次执行命令返回的状态,成功执行返回0
            $$ --- 当前进程号

//只读变量的声明:
    readonly --- 声明只读


//接受键盘输入:
    read
    -t 等待用户输入
    -p 输入提示信息
    -s 隐藏用户输入数据
    -e 调整输出格式
    -n 指定只接受的输入字符数
    

//相关运算符:
分类:
    算术、关系、逻辑、字符串(运算符)、文件测试(运算符)
算术运算符:  --- expr(表达式计算工具,用来求取表达式的值)
    //注意:表达式与运算符还有expr之间需要有空格
    例如:var=`expr 2 + 2`
    +
    -
    * --- 使用:\*(\转义)
    /  
    %
    =
    == --- 判断两边是否相等,相等返回true,否则false
    != --- 判断不等,不等返回true,否则返回false

关系运算符:
    -eq --- 相等返回true
    -ne --- 不等返回true
    -gt --- 左边大于右边返回true
    -lt --- 左边小于右边返回true
    -ge --- 左边大于等于右边返回true
    -le --- 左边小于等于右边返回true    

逻辑运算符:
    ! --- 非
    o --- 或(一真即真,全假为假)or
    a --- 且 (一假即假,全真为真) all


字符串运算符:
    = --- 检查两个字符串是否相等,相等返回true [ str1 = str2 ]
    != --- 检查字符串不等,不等返回true        [ str1 != str2 ]
    -z --- 检查字符串长度是否为0,为0返回true  [-z string]
    -n --- 检查字符串长度是否不为0,不为0返回true    [-n string]
    str --- 检查字符串是否不为空,不为空返回true  [$a]


文件测试运算符:
[ -b file ] --- 检查文件是否为块设备文件,是返回true
[ -c file ] --- 检查文件是否为字符设备文件,是返回true
[ -d file ] --- 检查文件是否为目录,是返回true
[ -f file ] --- 检查文件是否为普通文件,是返回true
[ -g file ] --- 检查文件是否设置SGID位


//注意使用bash时,(())支持c语言风格的算术运算、条件判断、三目运算


//case语句:
case $变量名 in
    "值1")
    如果变量的值等于值1,则执行程序1
    ;;
    "值2")
    如果变量的值等于值2,则执行程序2
    ::
    …省略其他分支…
    *)
    如果变量的值都不是以上的值,则执行此程序
    ;;
esac


for循环语法:
语法一:
for 变量 in 值1 值2 值3...(可以是一个文件等)
    do
        程序
    done
    
//for循环执行的次数取决于in后面值的个数(空格分开)
语法二:
for ((初始值:条件:变化))
do
    程序
done

while循环:    ---- 条件成立循环工作
while [ 条件判断 ]
do
    程序
done

until循环: --- 条件不成立循环继续
语法:
until [ 条件判断 ]
do
    程序
done

//函数:
语法
function 函数名 () {
    程序
}


exit语句:
系统碰到exit后,后续程序不再执行,直接推出脚本
语法:
    exit [返回值]
    
break与continue与c语言类似

正则表达式:
\转义字符,特殊字符按照普通字符处理
^匹配首行

awk编程:
概述:AWK是一种处理文本的语言,是一个强大的文本分析工具
printf格式化输出:
语法:
    printf '输出类型输出格式' 输出内容

    输出类型:
        %c:     ASCII字符.显示相对应参数的第一个字符
        %-ns:   输出字符串,减号“-”表示左对齐(默认右对齐),n是数字指代输出几个字符,几个参数就写几个%-ns
        %-ni:   输出整数,n是数字指代输出几个数字
        %f:    输出小数点右边的位数
        %m.nf   输出浮点数,m代表整数位数(不过好像对整数位无法强制限定),n代表小数位(对小数位能强制限定)
        
    输出格式:
        \a:输出警告声
        \b:输出退格键
        \f:清除屏幕
        \n:换行
        \r:回车
        \t:tab
        \v:换行并tab
        


awk的基本使用:
    awk '条件1{动作1} 条件2{动作2}...' 文件名
    条件(pattern):
        一般使用关系表达式作为条件:
        x > 10 变量x是否大于10
        x == y 变量x是否等于y
        a ~ b 判断字符串a中是否能匹配表达式b的自字符串
        a !~ b 判断字符串a中是否不包含能匹配b表达式的子字符串
        
        
    动作:
        控制流程语句
        格式化输出
    常用参数:
        -F --- 指定输入时用到的字段分割符
        -v --- 自定义变量
        -f --- 从脚本中读取awk命令
        -m duival值设置内在限制

    关键字:
        BEGIN --- BEGIN定义的动作只会在awk读取文件时执行一次
        END --- END与BEGIN刚好相反,只会在程序结束后执行一次

    awk命令执行的过程:
        awk虽然是列提取,但是也是行读取
        如果没有BEGIN条件,则执行BEGIN定义的动作
        若没有BEGIN条件,则读入第一行,把第一行的数据依次赋予$1 $2 $3..., $0代表一行的整体数据
        awk根据条件是否成立来确定是否执行相应动作,否则读取下一行,没有条件则每行都读取
        读取下一行循环以上步骤
        
    awk 识别字符串:/字符串/


    printf与print的区别与使用:
    print会在结尾默认加上\n,输出多个项目print会用空格自动分割
    print用于简单的输出需求
    printf自定义输出


    awk内置变量:
    $0 --- 代表整行数据
    $n --- 代表第n个字段(列)的数据
    NF --- 拥有的字段(列)的数量
    NR --- awk当前处理的行,是总行数的第几行
    FS --- 用户定义分割符
    ARGC --- 命令行,参数个数
    ARGV --- 命令行参数数组
    FNR --- 当前文件中的当前记录数
    OFMT --- 数值输出格式
    OFS --- 输出字段的分割符(默认空格)
    ORS --- 输出记录分割符(默认换行)
    RS --- 输入记录分割符(默认换行)


    //注意:在awk中赋值都不需要加$
    

    awk函数:
    function 函数名 (参数列表) {
        函数体
    }


//sed文本选取、替换、删除、新增的命令:
语法:
    sed [选项] '[动作]' 文件名


    //字符串替换:
    sed 's/旧字符串/新字符串/g' 文件名
    替换具体行的某个字符串: sed '具体行s/旧字符串/新字符串/g'

//字符处理命令:
    //sort排序:按照每行开头的第一个字符进行排序,反向需添加 -r
    

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词