shell

1:



#!/bin/sh
sum=0
i=1
while [ $i -le 10 ]

#while(($i<=10))  可以 或while((i<=10))  用(())时可以去掉变量前的$
do
#sum=`expr $sum + $i`  可以
sum=$[$sum+$i]
#i=$(($i+1))  可以 或i=$((i+1))  用(())时可以去掉变量前的$
i=$[$i+1] 
done
k=$[(15/(4-1)-3)*2]
echo "k=${k}"
echo "Sum is:$sum"


if [ $? -eq 0 ];then
echo "最后一个命令执行成功"
else
echo"最后一个命令执行错误"
fi


if(($?==0&&1>0));then
echo "最后一个命令执行成功"
else
echo"最后一个命令执行错误"
fi


if((2==2));then   //在 (())中 数字比较 和字符串比较一样
echo "2==2"
else
echo "2!=2"
fi


count=0
count=$((2*2))  //(()) 中只能做整数的运算 浮点数不行 如count=$((2.5*2.4)) 不行
echo "count=${count}"


[bnms@zj-web1 ~]$ vi zengtest.sh
#!/bin/sh
val=`grep -n "LATEST DETECTED DEADLOCK" dblocktest.txt  |cut -d : -f 1`  //查询关键字出现的行数   cut -d : -f 1 (以:分割取第一段)
if [ ! -z $val ];then    //判断不为空 (注意空格)
echo "$val"
else
echo "kong"
fi

//3. 双括号的特殊用法
(()) 增强括号的用法, 常用于算术运算比较. 双括号中的变量可以不使用$符号前缀, 只要括号中的表达式符合C语言运算规则, 支持多个表达式用逗号分开.
比如可以直接使用for((i=0;i<5;i++)), 如果不使用双括号, 则为for i in `seq 0 4`或者for i in {0..4}.这种扩展计算是整数型的计算,不支持浮点型.若是逻辑判断,表达式exp为真则为1,假则为0。
再如可以直接使用if (($i<5)), 如果不使用双括号, 则为if [ $i -lt 5 ].
[[]] 增强方括号用法, 常用于字符串的比较. 主要用于条件测试, 双括号中的表达式可以使用&&, ||, <, >等C语言语法.
比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ].

 

4:检查文件夹下目录的多少(df  -i  文件系统索引使用率较高,可以查找目录多的文件夹方便处理)

[bnms@tyjk3 bin]$ cat checkdf_i.sh
#!/bin/bash
#查找某个目录下文件的数量
for i in /bnms/masteragent/*;
do echo $i; find $i | wc -l;
done

5:时间差,数字判断

[dp@offline zengpan]$ cat test.sh 
startTime=$(date +%s)
rownum=`cat text.txt|wc -l`
if [ ${rownum} -eq 0 ];then
    echo "rownum is 0"
fi
endTime=$(date +%s)
echo "execute time is $(($endTime-$startTime)) s"

 6: for

#!/bin/bash
cd /home/dp/local/task/LoadXiaojinkuToHbase
date=20160831
for((i=0;i<10;i++))
do
 ./bin/start.sh -d ${date}0${i}
done
for((i=10;i<24;i++))
do
 ./bin/start.sh -d ${date}${i}
done

输出:

./bin/start.sh -d 2016083101
./bin/start.sh -d 2016083102
./bin/start.sh -d 2016083103
./bin/start.sh -d 2016083104
./bin/start.sh -d 2016083105
./bin/start.sh -d 2016083106
./bin/start.sh -d 2016083107
./bin/start.sh -d 2016083108
./bin/start.sh -d 2016083109
./bin/start.sh -d 2016083110
./bin/start.sh -d 2016083111
./bin/start.sh -d 2016083112
./bin/start.sh -d 2016083113
./bin/start.sh -d 2016083114
./bin/start.sh -d 2016083115
./bin/start.sh -d 2016083116
./bin/start.sh -d 2016083117
./bin/start.sh -d 2016083118
./bin/start.sh -d 2016083119
./bin/start.sh -d 2016083120
./bin/start.sh -d 2016083121
./bin/start.sh -d 2016083122
./bin/start.sh -d 2016083123

7>数组 && ftp 命令

#!/bin/bash
sj=`date -d yesterday +%Y%m%d`
file_path=/home/dp/zengpan/testftp/${sj}
echo "${file_path}"
file_name=("m0" "m1" "m2" "m3" "m4" "m5" "SUCCESS")
if [ $# == 1 ];then
sj=${1}
fi
for ((i=0;i<${#file_name[@]};i++))
do
ftp -n <<- EOF
open ip
user 用户名 密码
passive off
cd GeoTags
mkdir ${sj} //会重复创建文件夹,导致循环无法进行,此处只是示例for的用法
cd /GeoTags/${sj}
lcd $file_path
put ${file_name[$i]}
bye
EOF
done

8>sftp

[dp@mapping10 xjkdata]$ cat uploadHbaseData.sh
#!/bin/bash
sj=`date +%Y%m%d`
starttime=`date "+%Y-%m-%d %H:%M:%S"`
user=**
password=**
ip=**
port=22
upload_file_path=/DATA/dp
file_path=/data3/xjkdata/${sj}
tar_file_path=/data4/xjkdata/${sj}
currentDir=$(cd "$(dirname "$0")"; pwd)
echo "${starttime} upload start!"
if [ ! -d "${file_path}" ];then
mkdir ${file_path}
fi
if [ ! -d "${tar_file_path}" ];then
mkdir ${tar_file_path}
fi
function ftp()
{
hadoop_path=$1
tar_file_name=$2
hadoop fs -get ${hadoop_path} ${file_path}
cd ${file_path}
tar -cvf ${tar_file_path}/${tar_file_name} *
lftp -u ${user},${password} sftp://${ip}:${port}<<-EOF
cd ${upload_file_path}
lcd ${tar_file_path}
put ${tar_file_name}
bye
EOF
rm -rf ${file_path}/*
rm -rf ${tar_file_path}/*
}
if [ $# -eq 2 ];then
ftp $1 $2
endtime=`date "+%Y-%m-%d %H:%M:%S"`
echo "${endtime} $2 upload end!"
else
cat ${currentDir}/uploadHbaseData.conf|grep -v "#" |awk '{print $1"\t"$2}'|while read hadoop_path tar_file_name
do
ftp ${hadoop_path} ${tar_file_name}
endtime=`date "+%Y-%m-%d %H:%M:%S"`
echo "${endtime} ${tar_file_name} upload end!"
done
fi
ps 踩的坑:lftp -u ${user},${password} sftp://${ip}:${port}<<-EOF 结束的EOF标志前不能有空格和tab否则报错 line 37: warning: here-document at line 24 delimited by end-of-file (wanted `EOF')line 38: syntax error: unexpected end of file

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值