zoukankan      html  css  js  c++  java
  • Linux Shell脚本编程实用技巧

    一、自动输入

     自动实现人机交互之间的键盘输入,调用其他程序或脚本时实现自动输入。

    #用于人机交互键盘输入时候,实现自动输入y
    echo y | mkfs.ext4 /dev/sda1
    #当需要使用多个输入时,可采用以下方式
    echo -e y//ny 
    #也可以将规定输入生成一个输入文件,如:input.data,重定向到输入流
    mkfs.ext4 /dev/sda1 < input.data
    

     二、字符匹配替换

    一般的,Linux下的shell编程常用grep来实现文本查找,使用sed实现文本替换。

    #sed替换的一个例子
    #本例实现将text文本中的exit 0全部替换为空串
    sed -i  's/exit 0//g' text
    #sed同样可以通过管道来实现替换并输出替换后的文本。
    ls | sed 's/opkg//g'
    #sed使用单引号包含双引号来引用变量。
    sed -n ‘/’”$var”‘/p’ /tmp/test.log
    #sed使用分隔符:替代/(替换字串中含有/)(USB_PATH=/mnt/sda)
    sed -i "s:USB_PATH:$USB_PATH:g" /etc/init.d/entware

     三、重定向

    Shell中,输出重定向使用 > 、 >> 将输出流写入到设备或文件中去,不同的是,后者是追加写入,即不会抹去前面已有的内容。

    输入重定向使用 < 将文件重定向指输入流

    更多的,

    标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。    

    标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。

    标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

    很多时候,我们不想看到繁杂的提示信息,通常情况下我们这样做:

    #本例实现将输出流完全忽视,即屏蔽标准输出和标准错误输出
    ./exec > /dev/null 2>&1 
    

     四、判断选择分支

    通常情况下,我们使用if else来进行逻辑判断。判断的时候需要比对条件是否成立。Shell下一般使用 [ str1 = str2 ] 来判断字符串相等(中括号中的空格不可省略),当然该方式可做的判断还有很多,可参见:https://www.cnblogs.com/anorferde/p/5777928.html

    这里列举一些

    #本例实现判断文件目录是否存在
    if [ -d "$start" ]; then echo "文件夹已存在" else echo 文件夹不存在 fi

     五、交换分区配置

    Shell脚本可实现交换分区自动配置

    #SWAP_PATH为交换文件存储的位置
    #分配块文件,bs*count等于总大小
    dd if=/dev/zero of=$SWAP_PATH/swap bs=512K count=128
    #格式化为交换分区文件
    mkswap $SWAP_PATH/swap
    #启用交换分区
    swapon $SWAP_PATH/swap
    #配置开机时自启用
    echo "$SWAP_PATH/swap swap swap defaults 0 0" >> /etc/fstab
    

      六、变量说明

    Shell脚本部分常用变量说明

    $$
    #Shell本身的PID(ProcessID)
    $!
    #Shell最后运行的后台Process的PID
    $?
    #最后运行的命令的结束代码(返回值)
    $-
    #使用Set命令设定的Flag一览
    $*
    #所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
    $@
    #所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
    $#
    #添加到Shell的参数个数
    $0
    #Shell本身的文件名
    $1~$n
    #添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
    
  • 相关阅读:
    python3 TypeError: a bytes-like object is required, not 'str'
    Centos 安装Python Scrapy PhantomJS
    Linux alias
    Vim vimrc配置
    Windows下 Python Selenium PhantomJS 抓取网页并截图
    Linux sort
    Linux RSync 搭建
    SSH隧道 访问内网机
    笔记《鸟哥的Linux私房菜》7 Linux档案与目录管理
    Tornado 错误 "Global name 'memoryview' is not defined"
  • 原文地址:https://www.cnblogs.com/jsp1256/p/9438526.html
Copyright © 2011-2022 走看看