一、Shlel脚本的介绍
关于脚本,其实就是将命令写进一个文本中,从而被执行;换言之,就是一个文件,存放的是特定格式的命令,系统根据脚本解释器等从而将命令解析出来并执行。
执行方式
1)./xxx.sh 按照#!指定的解析器解析
2)bash xxx.sh 使用bash解析器解析
3). xxx.sh 使用默认解析
二、Shell脚本的编写
开头
一般会写明:#!/bin/sh
#! 用来声明脚本由什么shell解释,否则使用默认shell
单个 ‘#’ 表示该行注释掉
定义变量
shell支持三种方式定义变量
val=value
val='value'
val="value"
注意:!!!赋值符的两边是不可以有空格的
关于双引号与单引号:
双引号中可以引用变量的值,单引号中只是将其作为字符处理
val=value
echo "val=$val"
echo 'val=$val'
执行的结果就是
val=value
val=$val
如果想使用一个定义过的变量,就可以在变量名前直接加$
另外关于{},将变量放在{}中,就可以帮助编译器很好的识别变量
val="value"
echo "I want to know the ${val}id"
关于shell中的一些预设变量
$# 传给shell脚本参数的数量
$* 传给shell脚本参数的内容
$1、$2、 运行脚本的时候传递的参数
$? 命令执行后返回的状态,0表示成功
$0 当前执行的进程名
$$ 当前进程的进程号
关于shell中的一些表达式
${num:-val} 如果num存在,表达式的值为num,否则为val
关于if
if [条件1]
then
执行程序一
else
执行程序二
fi
#*******************
if [条件1]
then
执行程序一
elif [条件2]
then
执行程序二
else
执行程序三
fi
关于for
for ((初始值; 限制值; 执行))
do
程序
done
关于函数
函数名(){
命令
}
function 函数名(){
命令
}
三、Shell脚本应用历史记录
根据ip反向查找网卡名称
function get_eth_name(){
ip="127.0.0.1"
eth_names=(`ip l | awk -F":" '/^[^ ]/{print $2}'| awk '{print $1}'`)
for eth_name in ${eth_names[*]};
do
eth=`ip a show $eth_name | grep $ip`
if [ -n "$eth" ];then
echo "eth_name : $eth_name"
break
fi
done
关于使用tc命令,根据网卡名称模拟网络延迟
get_eth_name
sudo tc qdisc add dev $eth_name root netem delay 10s
sleep 10s
sudo tc qdisc del dev $eth_name root
目前学习到的就这些啦,以后有机会再补充啦