linux编写的shell脚本需要用dos2unix 处理一下脚本,否则有些字符会出现问题。 #!/bin/bash
在linux执行脚本的时候经常错误:hello.sh: line 8: syntax error: unexpected end of file
dos格式文件传输到unix系统时,会在每行的结尾多一个^M,
因为文件格式的原因有时会导致我们的unix程序,或者shell程序出现错误,那么需要把这些dos文件格式转换成unix格式,方法是
vi hello.sh
:set fileformat=unix
:w
1 test和 [] 作为判断命令符
2 $(()) 数字运算 放到这个里面,保证运算
for in遍历功能,自动对字符串按空格遍历 :
注意:在shell中$* 为shell中传入的所有参数。
1 遍历文本文件中的内容,然后输出 ,用 ``或 $()来讲一列数据变成一行,可以遍历
for sh in `cat /web/sh/testid`
do
echo $sh
done
2 遍历linux命令生成的数据: 命令用` 符号括起来 ,当然也可以换成$() 来代替``
for i in `ps -ef | grep hadoop | awk '{print $2}'`
do
echo $i
done
3 遍历所有log文件内容,并打印 ,或者换成ls *.log 打印所有的文件名称
for j in $(cat *.log)
do
echo $j
done
4 利用seq的数字格式化功能,批量创建一定格式的文件夹 %03意思是:3位浮点数
mkdir $(seq -f 'dir%03g' 1 10)
5 计数器使用 ,用let
num=0
for i in $(seq 1 10)
do
let num+=1
done
echo $num
6 计算累加数据用let
num=0
sum=0
for i in $(seq 1 10)
do
let sum=$sum+$i
done
echo $sum
7 参数 $#表示脚本参数的个数 $*表示脚本参数的内容 $0表示当前执行的脚本或程序名称
num=0
for i in $@
do
let num=$num+1
echo $i
done
echo $num
for i in $*
do
let num=$num+1
echo $i
done
echo $num
echo $#
8 函数使用: 参数用过$n 来获得,返回值通过 $? 获得, 必须放在调用之前
function sum(){
echo $1,$2 ;
return $(($1+$2));
}
sum 2 3 ;
echo $?;
9 awk 获取内存中第一列为 "Mem:"的行,打印第四个值
free -m | awk '$1=="Mem:"{print $4}
10 打印cpu的信息:知识点有两个: grep 过滤使用 、awk 使用
echo -e "cPUInfo\t" `grep "model name" /proc/cpuinfo|awk -F: '{print $2}'`
10 case in 的使用
echo "please input score "
read SCORE
case $SCORE in
100|9[0-9]|8[5-9]) echo "you are the best !";;
7[0-9]|8[0-4]) echo "you get a good mark !" ;;
6[0-9]|7[0-4]) echo "you must study hard!";;
esac