美文网首页
shell简介一

shell简介一

作者: 李永开 | 来源:发表于2019-04-29 11:17 被阅读0次
    1. 在shell中,#代表注释
    2. 执行chmod +x ./sh_demo.sh,./sh_demo.sh可直接运行,不再需要sh ./sh_demo.sh这种写法
    3. 变量和值之间的=号不能有空格
    name="siri"
    age=8
    
    1. 使用readonly修饰只读变量
    name="siri"
    readonly name
    
    1. 使用unset删除变量
    unset name
    

    6.使用$取变量

    ${name}
    

    7.sh脚本的第0个参数为脚本的名称

    fileName=${0}
    name=${1}
    age=${2}
    sex=${3}
    echo "名称为:$name 年龄为:$age  性别为:$sex"
    
    运行: ./sh_demo.sh n a s
    输出: 名称为:n 年龄为:a  性别为:s
    

    8.$?表示上一条命令是否执行成功.

    返回值为0:表示命令成功
    返回值为1:表示命令执行结果
    返回值为2:表示命令执行状态返回码
    

    9.参数相关

    $#   参数个数
    $*   参数列表 注意:把所有参数组合成一个字符串
    $@   参数列表 注意:依次把所有的参数输出,不会组合成字符串
    $$   获取当前shell进程ID
    

    10.使用#获取字符串长度

    name="siri"
    echo ${#name}
    输出:4
    

    11.使用:字符串截取,从第1位开始截取2个字符

    name="siri"
    echo ${name:1:2}
    输出:ir
    

    12.打印数组的所有元素

    arr=("1" "2" "3" "4")
    echo ${arr[@]}
    输出:1 2 3 4
    

    13.打印数组的长度

    arr=("1" "2" "3" "4")
    echo ${#arr[@]}
    输出:4
    

    14.算数运算符,需要用expr,不能直接加

    加减法:
    a=1
    b=2
    c=`expr $a + $b`
    echo $c
    打印:3
    
    
    乘法:需要加\
    a=3
    b=5
    c=`expr $a \* $b`
    echo $c
    打印:15
    
    
    除法:
    a=15
    b=5
    c=`expr $a / $b`
    echo $c
    打印:3
    
    取余:
    a=14
    b=5
    c=`expr $a % $b`
    echo $c
    打印:4
    
    
    1. 逻辑运算符&& ||,中括号[]中间一定要有空格
    a=1
    b=5
    if [ $a -lt 2 ] && [ $b -eq 6 ]
    then
    echo "成立"
    else
    echo "不成立"
    fi
    打印:不成立
    
    1. 使用break跳出循环
      *break 1代表退出1层循环, 默认为1
      *break 2代表退出2层循环
    2. 逐行读取文件
    cat a.txt | while read line
    do
        echo "${line)"
    done
    
    1. print的使用
      printecho都是用来输出内容的,区别在于echo为标准输出,print为自定义输出.
    printf "%-10s %-.4f \n" siri 3.333
    打印:siri       3.3330
    解释:%为占位符,-为左对齐,10代表长度,s代表字符串,.4代表小数点后四位
    
    1. 在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。
    wc sh_demo.sh
    输出:13      24     110 sh_demo.sh
    
    1. 重定向
      <输入重定向
      << 创建文件
      >输出重定向,会替换
      >>不会替换,只会追加内容
    2. 管道的使用
    echo "1+1" | bc
    打印:2
    解释:将"1+1"这个式子放到bc(一个计算器)里面执行
    
    1. 将控制台的错误信息输出到文件
    cd 不存在的路径 2 > error.txt
    解释:加个数字 2  就好了,2 代表异常
    
    cd 存在的的路径  不存在的路径 2> error.txt > right.txt
    解释:将错误的信息和正确的信息输出到**不同**的文件
    
    cd 存在的的路径  不存在的路径  &> errorAndRight.txt
    解释:将错误的信息和正确的信息输出到**同一个**文件
    
    1. 临时重定向
    file.sh
    {
        echo "hello"  >&2 
        echo "world"
    }
    执行sh file.sh > error.txt,
    发现error.txt中只有hello,------因为使用 >&2 将 "hello"标记为异常了
    world则在控制台输出.
    
    1. 使用exec永久重定向
    • 保存数据
    file.sh
    {
        exec 1> output.txt
        echo "hello" 
        echo "world"
    }
    执行sh file.sh,发现所有的内容都写到output.txt里面了.
    

    保存错误信息

    file.sh
    {
        exec 1> output.txt
        echo "hello" 
        echo "world"
    
        exec 2> error.txt
        echo "find error" >&2
    }
    执行sh file.sh,发现"hello"  "world"写到output.txt里面了.
    "find error"写到error.txt里面了.
    
    1. 使用exec 0 < input.txt来重定向输入
    • 0表示系统默认标准输入
    • 1表示系统默认标准输出
    • 2表示错误
    • 大于等于3 则为自定义
    exec 666> output.txt
    echo "hello"
    echo "world" >&666
    echo "yes"
    结果:打印了 "hello"和"yes",而"world"则输出到了output.txt.
    
    1. 恢复重定向
    exec 3>&1
    exec 1> output.txt
    echo "hello"
    
    exec 1>&3
    echo "world"
    解释:exec 3>&1将原来的 exec 3 替换为 exec 1,"hello"出现在output.txt里面.
    exec 1>&3将exec 1 替换为 exec 3,所以"world"不会出现在output.txt里面.
    
    1. 关闭文件描述符,就不能再写入了
    exec 3>&-
    
    1. /dev/null路径,帮助我们不用在控制台打印内容,并且自动清空内容
    cat a.txt > /dev/null
    没有输出,  /dev/null也没有值
    
    或者
    cat /dev/null > a.txt
    这样可以清空a.txt
    
    1. 创建临时文件
    mktemp a.XXXXXX
    解释:本地随机生成生成一个临时文件(必须大写的X)
    
    mktemp -t a.XXXXXX
    输出:/var/folders/40/gl3_xjt576vg008mqrpdqzdh0000gn/T/a.XXXXXX.hOEHe1td
    解释:生成一个系统的临时目录
    
    1. 创建临时目录
    mktemp -d a.XXXXXX
    

    相关文章

      网友评论

          本文标题:shell简介一

          本文链接:https://www.haomeiwen.com/subject/pwzjnqtx.html