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参数…。
原文地址:https://www.cnblogs.com/jsp1256/p/9438526.html