1.shell算术运算 可以使用shell结构来执行简单的整数运算。只需将特定的算术表达式用"$(("和"))"括起。
echo $((100/3))
myvar="56" echo $(($myvar + 12))
也可以使用expr表达式
a=100 echo `expr $a \* $a`
2.应用字符串变量时最好把双引号加上。
3.条件判断
if [ condition ]; then
action
fi
注意:
在[]中,只能有一个判断式;
在[]与[]之间,可以使用&& 或|| 组合。
4. declare -i 声明一个整形变量。
5.fc -l
列出登录主机之后,最近执行过得指令。
6.find用法
find . -name '*.txt' -exec rm -f {} \;
由当前目录开始往下查询扩展名是.txt的文件,找到之后,执行-exec删除文件的指令,{}表示找到的文件,;表示执行指令-exec的终止符号。
7.basename
取得路径名称中最后的文件名部分。
8.dirname
取得二路径名称中的目录部分。
9.${变量:位置起点:长度}和${变量:位置起点}
由指定位置开始,截取指定长度的子字符串。
filename="/etc/apache2"
substr=${filename:1:3},从第二个开始截取三个字串。etc
10.${@:起点}和${@:起点:个数}
由起点开始,取得后面所有的位置参数。
${@:1}
./poz.sh 88 77 66 99
88 77 66 99
11.计算字符串长度
${#变量名称},返回变量值的字符串长度
filename="/usr/sbin/ntpdate"
echo ${#filename} ,长度17
12、算术运算
序号 名称 语法 范例
1 算数扩展 $((算术式)) r=$((2+5*8))
2 使用外部程序expr expr 算数式 r=`expr 4 + 5`
3 使用$[] $[算术式] r=$[4 +5 ]
4 使用内置命令declare declare -i 变量=算术式 declare -i r=8+16
5 使用内置命令let let 算术式 let r=8+16
13、条件测试的写法
执行某一个命令的结果,执行成功则返回0,为真;执行失败则返回非0,为假;
传回某一个命令执行结果的相反值. ! 命令;
使用复合命令((算式)) eg:((0))表示假;((1))表示真;((-1))表示真
使用Bash关键字'[['、']]'组成的式子:[[ 判断式 ]] if [[ str > xyz ]] ; 判断str字符串和xyz字符串的大小
使用内置命令:test 判断式,真值传回0,假值传回1.
使用内置命令:[判断式]
14.case
case语法
case 待测项 in
样式串行1) 命令区域1;;
样式串行2) 命令区域2;;
......
*) 命令区域;;
esac
15. for 语法
for 变量 in 串行
do
命令区域
done
for((初始条件;终止条件;异动项))
do
命令区域
done
无穷循环
for((;1;))
do
命令区域
done
16、while语法
while 条件测试
do
命令区域
done
IFS=':'
while read f1 f2 f3 f4 f5 f6 f7
do
echo "账号:$f1,login shell 是: $f7 "
done < "/etc/passwd"
17、until 循环 如果循环为假,则执行,否则不执行
until 条件测试
do
命令区域
done
18、select ,建立一个列表。列表的选项,即串行中的各个字符。
select 选项变量 in 串行
do
命令区域
done
注意:列表提示符号由Bash的内置标量PS3定义,默认值是#?,可以改变PS3的值。select会给各个选项一个编号,编号由1开始递增,当使用者键入编号,选择其中某一选项时,该选项的内容就设置给选项变量,而键入的编号值则放入REPLY变量中。
19、函数语法
语法1
function 函数名称()
{
命令区域
}
语法2
函数名称(){命令区域}
语法3 如果使用关键词function,那么,函数名称后面的小括号可以省略
function 函数名称
{
命令区域
}
函数调用
函数名称
函数名称 参数1 参数2 参数3 ....
20、sed 是一种非交互式的流编辑奇,可动态编辑文件。用法如下:sed '样式命令' 文件
1)删除某一段范围的数据行。
sed '1,4d' datafile1 , 把第1到第4行数据删除,剩余的显示出来,d是sed的删除命令
2)把含有“样式”的数据行删除。
sed '/La/d' datafile,把含有La的行删除,剩下的显示出来。其中,//代表搜索之意。
sed '/^$/d' datafile,删除datafile的空白行。
sed '/[0-9]\{3\}/d' datafile,把含有“3位数”的行删除,剩下的显示出来。
3)把不含有“样式”的数据行删除
sed '/La/!d' datefile3,把不含有La的行删除,剩下的显示出来。
4)把含有“样式”的数据行显示出来。
sed '/La/p' datafile,把含有La的行显示出来。p是sed的命令,它会把目前的数据显示出来,但因为sed默认也会显示不符合的数据行,修改如下:sed -n '/La/p' datafile。选项-n会抑制sed显示出其它资料行的默认操作,只显示符合样式的数据行。
5)取代
sed -n 's/La/Oo/p' datafile s是取代的意思,第一对//中含括的字符串La是搜索的目标,第二对//含括的是置换的字符串Oo。把数据行中的字符串La换成Oo。上面这个指令,只会更换第一个出现的La而已。如果全部置换,应再加上全局命令g。如下:sed -n 's/La/Oo/gp' datafile。
sed -n 's/La//p' dataf3。把每一行第一个出现的La删除(把La置换成空字符串)
sed 's/^...//' dataf3 把每一行开头的3个字符删除。
sed 's/...$//' dataf3 把每一行末尾3个字符删除。
6)取用符合样式的字符串
sed -n 's/\(La\)/\1Oo/p' dataf3。把找到的La存起来,用\1取回来在使用。结果:若数据行含有La字符串,则第一个出现的La会置换成LaOo,然后再显示这些含有La的数据行。
7)找到符合样式的数据行后,再进行取代的操作。
sed -n '/AAA/s/234/567/p' dataf3,找到含有AAA的那一行之后,将234换成567。
sed -n '/AAA/,/DDD/s/B/567/p' dataf3,将含有AAA到含有DDD的那几行,皆将其中的B换成567。
sed -n '2,4s/B/567/p' dataf3由第2行到第4行,皆将其中的B换成567。
21、awk 是一种可以处理数据、产生格式化报表的语言,功能相当强大。awk的工作方式是读取数据文件,将每一行数据视为记录,每笔记录以字段符分成若干字段,然后输出各个字段的值。
1)awk常用的作用格式:
awk “样式”文件,把符合样式的数据行显示出来;
awk ‘操作’ 文件,对每一行都执行{}中的操作;
awk ‘样式{}’ 文件,对符合样式的数据行,执行{}中的操作;
2)用法
awk ‘/La/’ dataf2 ,显示含La的数据行;
awk ‘{ print $1 , $2 }’ dataf3 ,显示dataf3每一行的第1和第2个字段;
awk
‘/La/{ print $1 ,$2 }’ dataf3,显示含有La关键字的数据行的第1及第2个字段显示出来;
awk -F: ‘/^ols3/{ print $3 ,$4}’
/etc/passwd ,使用选项-F,指定:为分隔字符,账号ols3的(第3个字段)及gid(第4个字段)显示出来;
awk –F: ‘BEGIN{OFS=”+++”}/^ols3/{print
$1,$2,$3,$4,$5}’ /etc/passwd。执行结果: ols3+++x+++1002+++1002+++ 。本例中,BEGIN{}区域指示awk一开始先做初始化的操作,即设定OFS=”+++”。变量OFS的作用是存储输出字段的分隔符。接着,寻找ols3的账号行,找到后,使用print印出第1~第5个字段,且彼此用+++隔开。
取得网卡的IP
Ifconfig | grep ‘inet addr:’ | grep Bcast |
awk ‘{print $2}’ | awk –F: 'print $2'
取得系统内存大小
cat /proc/meminfo | awk ‘/MemTotal/{print
$2}’
posted on 2012-06-14 18:01
kxbin 阅读(161)
评论(0) 编辑 收藏