Linux shell基础总结

声明用户用哪种解释器解释shell程序:

#!{

    bin/bash,bin/csh,bin/sh,bin/tcsh,bin/ksh

}

执行:{

    chmod 755 run.sh,./run.sh

    sh ./run.sh

}

终端(命令)<[导入]文件,终端(命令)>[覆盖]文件,终端(命令)>>[追加]文件

管道(命令结果输出|命令开始输入)

特殊字符{

    $变量名(引用变量)

    #注释,首行声明为特例

    引号[“$`\除外其他为串(转义除外)”‘所有均为串’`当命令执行`]

}

变量{

    系统变量{

        $#(命令行参数个数)

        $n($1…参数)

        $0(当前程序名称)

        $?(上一命令/函数返回值)

        $*(以参数1,2…形式保存所有参数)

        $@(以参数1,2…形式保存所有参数)

        $$(本程序PID)

        $!(上一命令PID)

}

环境(~/.bash_profile~/.bashrc中设置){

        export 新环境变量名=””

        PATH 命令搜索路径以冒号分隔  与DOS区别是当前目录不在搜索中

        HOME 用户家目录的路径名 是cd命令的默认参数

        COLUMNS 定义命令编辑模式下使用的命令行长度

        Editor 默认的行编辑器

        Visual 默认的可视编辑器

        Fcedit 命令fc使用的编辑器

        Histfile 命令历史文件

        Histsize 命令历史文件最多包含的命令条数

        Histfilesize 命令历史文件中包含的最大行数

        Ifs 定义shell使用的分隔符

        Logname 用户登陆名

        Mail 指向一个需要shell监视其修改时间的文件

        Mailcheck shell检查mail文件的周期

        Mailpath ?发向用户的消息

        Shell shell的路径名

        Term 终端类型

        Tmout shell自动退出时间默认0秒(禁止shell退出)

        Prompt_command 指定在主命令提示符前执行的命令

        Ps1 主命令提示符

        Ps2 命令执行过程中要求输入数据时用

        Ps3 select的命令提示符

        Ps4调试命令提示符

        Manpath寻找手册页路径以冒号分隔

        Ld_library_path寻找库路径以冒号分割

}

用户{

    命名规则与c相同,大小写敏感

    无需声明,赋值即声明

    等号两端必无空格

    引用变量[($变量名),(${变量名}建议用这个)]

    命令行中[unset 变量名](清空变量赋值)

    命令行中[readonly 变量名](定义常量,再赋值出错)

    变量默认全局

    [local 变量名](局部变量)

数组{

    数组名=(v,v,v,v,v)

    数组名=(k=v,k=v,,,,,)

    数组名[index]=v

    引用数组:${数组名[index]}

    数字/数组声明(declare):

    declare –(开启)/+(关闭)[i(integer)/a(array)/f(function)/r(readonly)/x(定义为通过环境输出变量)]

}

运算符与c基本相同

流程控制{

    -lt <

    -le <=

    -gt >

    -ge >=

    -eq =

    -ne  !=

}

分支{

    test 判断表达式/[表达式](不会产生标准输出,必须通过返回值判断)

    test 参数[文件均已存在-f(普通文件)/s(字节数>0)/r(可读的)/w(可写的)/x(可执行的)/d(目录)] file

    运算符{-a/-o/!,\(,\)  转义括号两端均有空格}


    If 表达式; then 表达式;fi


    If 表达式; then 表达式; else 表达式;fi


    If 表达式; then 表达式;elif then表达式{1,} ;fi


    Case “$#” in

    0)      Echo…;;

    1)      Echo…;;

    *)  Echo…;;

    esac

}

循环{

    For 变量名 in list(只要是列表就行,如:ls*.txt, 很多用空格分隔的串,seq 1 9=1~9

    Do

    语句(引用变量${变量名})

    $(expr $a \* $b)对表达式求值   或者[]也可对表达式求值

    Done

    While 表达式;

    Do 语句;

    Done

    Until 表达式;

    Do 语句;

    Done

    中断语句[break,continue,exit(终止程序并返回值可用$?获取,exit 返回值,这样指定返回值)]

    }

}

函数{

    先声明才可用

    Function name{…[return]}

    Name(){…[return]}

    调用:name 参数….

递归{

    a(){

    local i=$1

    if [$i –eq 0]

        then echo 1

    else

        local j=`expr $i-1`

        local k=`a $j`将函数名写在斜引号中实现调用

        echo `expr $i  \* $k `

    fi

 }

交互{

    echo转义{

    \a响铃

    \b退格

    \c强制换行

    \e退出

    \f清除屏幕

    \n换行

    \r 回车

    \t tab

    \v 垂直制表符

    \\

    \onnn 八进制({0,3})

    \nnn 八进制({1,3})

    \xhh 十六进制({1,2})

    echo “dfdfdg\nsdgfsg”

}

用户输入{

    read{

        -a name 将输入读入name数组

        -d 用于截断输入的字符默认换行\n

        -n 读入n个字符

        -p 显示一个提示

        -r 取消转义  \n正常显示

        -s 安静模式  输入字符不显示

        -t 超时read自动停止

        eg: read –p “请输入字符串:” str      将输入的串给str变量

        echo $str  显示str

}

猜你喜欢

转载自blog.csdn.net/zmjh1996/article/details/80206359