一、特殊变量
$0:当前脚本的文件名 $num:num为从1开始的数字,$1是第一个参数,$2是第二个参数,${10}是第十个参数 $#:传入脚本的参数的个数 $*:所有的位置参数(作为单个字符串) $@:所有的位置参数(每个都作为独立的字符串)。 $?:当前shell进程中,上一个命令的返回值,如果上一个命令成功执行则$?的值为0,否则为其他非零值,常用做if语句条件 $$:当前shell进程的pid $!:后台运行的最后一个进程的pid $-:显示shell使用的当前选项 $_:之前命令的最后一个参数
二、数组循环示例
#!/bin/bash net=($(ifconfig |grep ether|awk '{print $2}')) for ((i=0;i<${#net[*]};i++)) do echo "${net[$i]}" done
#!/bin/bash list=(1 2 3) for ((i=0;i<${#list[*]};i++)) do echo $[${list[$i]}*$1] done # 取得数组元素的个数 length=${#array_name[@]} # 或者 length=${#array_name[*]} # 取得数组单个元素的长度 lengthn=${#array_name[n]}
三、读取指定行并写入文件
#!/bin/bash file=/etc/passwd num=(20 40 60 56 32 25) for ((i=0;i<${#num[*]};i++)) do head -${num[$i]} $file |tail -1 >>/tmp/test.log done
四、ping某个网段的主机,显示是否存活
#!/bin/bash for i in `seq 100 105`;do ping -c 1 192.168.0.$i >>/dev/null && echo "192.168.0.$i is up" || echo "192.168.0.$i id down" done # &&表示前面执行成功才继续执行后面 # ||表示或者