Monthly Archive: October, 2016

Linux Shell 手记

下面的例子展示了如何向脚本传递参数、脚本如何获取参数、if else判断、变量的使用等基本内容。

#!/bin/bash
 
# 如果参数个数大于1
if [[ $# -lt 1 ]]; then
	echo "args count must > 1"
	echo "Uage: bash +x example01.sh [args...]"
	exit
fi
 
# 获取传递的参数并赋值给arg
arg=$1
 
if [[ $arg -gt 10 ]]; then
	echo "$arg > 10"
else
	echo "$arg < 10"
fi

这个脚本的调用方式如下:

bash +x example01.sh 5

下面的例子展示了数组、函数、循环等基本使用。

#!/bin/bash
 
if [[ $# -lt 1 ]]; then
	echo "args count must > 1"
	echo "Uage: bash +x example01.sh [args...]"
	exit
fi
 
# 当前命令行所有参数。置于双引号中,表示个别参数
args=$@
 
for arg in $args; do
	echo $arg
done
 
function fun() {
	echo $1
}
 
fun "hello shell"
 
fun2() {
	echo "Linux"
}
 
fun2

注意,函数fun中的$1,获取的是函数参数,不是脚本调用时传入的参数。$@ 是获取脚本调用时传入的参数列表。

while 循环以及其他几种循环、case、表达式expr的使用

#!/bin/bash
 
if [[ $# -lt 1 ]]; then
	echo "args count must > 1"
	echo "Uage: bash +x example01.sh [args...]"
	exit
fi
 
case $1 in
	"install" )
		echo "operation type is install"
	;;
	"uninstall" )
		echo "operation type is uninstall"
	;;
	* )
		echo "operation type is not support"
	;;
esac
 
for ((i=0;i<3;i++))
do
	if ((i==1))
	then
			continue
	fi
	echo $i
done
 
for i in `seq 5`
do
	echo "loop $i"
done

注意这里的case * 并不是所有,而是输入值不在case中,相当于default. 在循环中可以使用continue/break等关键字,非常类似java等其他语言的循环。
Read more

Linux防火墙iptables使用记录

# 查看现有的iptables规则
iptables -L -n --line-numbers
 
# 删除某iptables规则
iptables -D INPUT 12
 
# 清除现有iptables规则
iptables -F
iptables -X
iptables -Z
 
# 创建规则 (开放端口)
#允许本机访问
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许从22端口进入的包返回
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#如果有其他端口的话,规则也类似,稍微修改上述语句就行
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
 
# 屏蔽ip
# 若需屏蔽整个ip段(123.0.0.1到123.255.255.254)则换为123.0.0.0/8
# 若需屏蔽ip段123.123.0.1到123.123.255.254,则换为124.123.0.0/16
# 若需屏蔽ip段123.123.123.1到123.123.123.254则换为123.123.123.0/24
iptables -I INPUT -s 123.123.123.123 -j DROP
 
# 设置开机启动
chkconfig --level 345 iptables on
 
# 保存iptables规则
service iptables save

Read more