一、自动输入
自动实现人机交互之间的键盘输入,调用其他程序或脚本时实现自动输入。
#用于人机交互键盘输入时候,实现自动输入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 ] 来判断字符串相等(中括号中的空格不可省略),当然该方式可做的判断还有很多
这里列举一些
#本例实现判断文件目录是否存在
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参数…。