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参数…。
    
  • 相关阅读:
    解决Unsupported major.minor version 51.0问题的感悟
    python 自己实现for循环:
    去除(UTF8)格式文本中的Bom
    python range与xrange
    Permission denied: make_sock: could not bind to address处理
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    centos下postgresql的安装与配置 20101217 12:39:15
    android软键盘 android:windowSoftInputMode
    android 代码实现安装卸载apk
    Android有效解决加载大图片时内存溢出的问题
  • 原文地址:https://www.cnblogs.com/jsp1256/p/9438526.html
Copyright © 2011-2022 走看看