刚开始做shell编程的时候,那叫一个坑爹,错到想哭,因为根本就找不到问题所在,所以撞了几次墙终于有所感觉了,知道一些常识,后面撞墙也就越来越少了。
有些东西还是要记下来比较好,否则的话就不是欲哭无泪了,却是头破血流,尸横遍野,惨不忍睹
一:一些基本的必须知道的东西,不然几乎写不出一行代码!
i=10;
while [[ $i -gt 5 ]];do
echo"the loop number of while case is: $i";
#!/bin/sh
case $1 in
start | begin)
echo "start something"
;;
stop | end)
echo "stop something"
;;
*)
echo "Ignorant"
;;
#!/bin/bash
a=$1
二:文本的一些实用性技巧:
将文本的某几列替换的写法
三:数组
echo ${#a[@]} 数组长度
echo ${a[2]} 某个数组元素
echo ${a[*]}整个数组全部,也可以用@代替*
a[1]=100赋值
unset a删除数组
unset a[1] 删除某一个
a=(1 2 3 4 5)
[chengmo@centos5 ~]$ echo ${a[@]:0:3}
c=(${a[@]:1:4})取部分
[chengmo@centos5 ~]$ echo ${#c[@]}
4
[chengmo@centos5 ~]$ echo ${c[*]}
a=(1 2 3 4 5) 每个元素做同样的事情
[chengmo@centos5 ~]$ echo ${a[@]/3/100}
调用python产生csv的脚本
四一些自己写的脚本:gen_csv.sh
1 #!/bin/bash
2
3 a=$(ls ../egg_spot_data/PriceData/*.csv)
4 for i in ${a[@]}
5 do
6
7 python ./eggSpotIndex.py -m info.map -i "$i" -o . -d "False"""""
8 done
9
10
echo "$a" | awk '{s[$1]+=1}END{for(i in s){print i,s[i]}}'
BASEDIR=$(pwd)
Q=/home/data/q/q3.3.sh
COMMAND_HISTORY=$BASEDIR/command_history.txt
rm $COMMAND_HISTORY
touch $COMMAND_LIST
touch $COMMAND_HISTORY
mkdir -p $BASEDIR/output_old
# bash -c "$BASEDIR/gen_command_list.sh 2016-04-07 2016-04-07 night"
sleep 1
bash -c "$BASEDIR/gen_command_list.sh $(date +%Y-%m-%d) $(date +%Y-%m-%d) day"
# bash -c "$BASEDIR/gen_command_list.sh 2016-04-08 2016-04-08 day"
# bash -c "$BASEDIR/gen_command_list.sh 2016-04-07 2016-04-07 night"
sleep 1
bash -c "$BASEDIR/gen_command_list.sh $(date +%Y-%m-%d) $(date +%Y-%m-%d) day"
# bash -c "$BASEDIR/gen_command_list.sh 2016-04-08 2016-04-08 day"
sleep 5
bash -c "$BASEDIR/start_command_list.sh"
sleep 5
bash -c "$Q $BASEDIR/../sim_futures.q $BASEDIR/output"
cat $1 | awk -v a=$2 -v b=$3 -v c=$4 '{$4=a;$5=b;$1=c;print}'>command_new.txt;
elif (( $#==3 ));then
cat $1 | awk -v a=$2 -v b=$3 '{$4=a;$5=b;print}'>command_new.txt;
elif (( $#==2 ));then
cat $1 | awk -v a=$2 '{$4=a;$5=a;print}'>command_new.txt;
fi
2 Date=$(date +%s)
3 count=$(ls $1 |wc -l)
4 while true
5 do
6 DateNew=$(date +%s)
7 if(($(date +%s)==$Date+1));then
8 Date=$(date +%s)
9 count_new=$(ls $1|wc -l)
10 tmp=$(($count_new-$count))
11 count=$(ls $1 |wc -l)
12 echo $tmp
13 fi
14 done
解决一个问题:mv或者cp参数列表太长:find . -name "*.csv" -exec cp {} /home/data/output/ \;