玩转linux系统经常碰到需要编写shell脚本处理一些特殊操作,下面以一个简单例子浅析记录一下,后续更新。
#!/bin/sh
echo "input the name"
read name
echo "$name"
if [ 1 -eq "$name" ]; then
echo "1"
elif [ 1 -eq "$name"];then
echo "2"
else
echo "3"
fi
此shell脚本应用了if逻辑或读取用户输入。
sed
Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模式的内容输入到屏幕上。还可以对原文件改动,但是不会再屏幕上返回结果。
sed [option] ‘sed command’ filename
sed命令的选项(option):
-n :只打印模式匹配的行
-e :直接在命令行模式上进行sed动作编辑,此为默认选项
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
-r :支持扩展表达式
-i :直接修改文件内容
sed command:
a\ 在定位行号后附加新文本信息
d 删除定位行
s 使用替换模式替换相应模式
g 将模式2粘贴到/pattern n/
1、修改路由实例(追加路由信息)
#!/bin/sh
path=/etc/network/static-routes
echo $path
src_ipaddr1=192.168.1.1
dst_ipaddr1=192.168.254.254
src_ipaddr2=192.168.2.1
dst_ipaddr2=192.168.254.254
echo $src_ipaddr1
echo $dst_ipaddr1
echo $src_ipaddr2
echo $dst_ipaddr2
sed -i "6a any net $src_ipaddr1 netmask 255.255.0.0 gw $dst_ipaddr1" $path
sed -i "6a any net $src_ipaddr2 netmask 255.255.0.0 gw $dst_ipaddr2" $path
其中,6a代表在第6行之后插入,-i代表插入;在指定路径的文件中在第6行之后插入指定内容。
2、修改ip实例(替换ip信息)
#!/bin/sh
path=/etc/network/interfaces
echo $path
src_ipaddr1=192.168.1.1
dst_ipaddr1=192.168.1.1
src_ipaddr2=192.168.1.1
dst_ipaddr2=192.168.1.1
src_ipaddr3=192.168.1.1
dst_ipaddr3=192.168.1.1
echo $src_ipaddr1
echo $dst_ipaddr1
echo $src_ipaddr2
echo $dst_ipaddr2
echo $src_ipaddr3
echo $dst_ipaddr3
sed -i "s/$src_ipaddr1/$dst_ipaddr1/g" $path
sed -i "s/$src_ipaddr2/$dst_ipaddr2/g" $path
sed -i "s/$src_ipaddr3/$dst_ipaddr3/g" $path
其中,-i代表插入,s代表替换;在指定路径的文件中将源内容替换为目标内容。
注:在写测试sh脚本时注意winows下的回车与linux下的回车不同,会导致错误,建议直接在linux下通过vim编辑。