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参数…。