日期:2014-05-16  浏览次数:20873 次

shell中的while
Java code
#!/bin/csh -f
###########################################
###             手工设置变量            ###
###########################################

# 删除还是备份 0是备份,1是删除
setenv OPERATE_TYPE 0

# 备份天数或者删除天数例如30代表备份30天后的数据或者是删除30后的数据
setenv BCK_LOGS_DAYS 30

# 设置日志保存路径
setenv BCK_LOGS_ROOT /home/public/temp/logstemp
# setenv BCK_LOGS_ROOT ~/bin/logs


# 设置日志保存文件夹
setenv  mkdirdate `date +%Y-%m-%d`
###########################################
###           程序运行日志备份          ###
###########################################

# 切换工作路径
set bl_path="`dirname $0`"
cd $bl_path

# 得到相比较时间
set now_time="date -d '-30 day' +%Y-%m-%d"
echo "得到相比较的时间" 


# 备份操作
if ($OPERATE_TYPE  == 0) then
echo "得到操作类型" 

# 创建临时文件,记录符合条件的日志名称
touch temps.log
echo "成功创建临时文件" 
 
# 记录文件名到文件  
ls  |awk '/.log./' > temps.log
echo "成功写入文件" 


#读记录
while read line
do

 echo "成功读取文件名称" 
             
      file_name=`${line}##*.`
      echo "成功文件名称中的日期" 
      
      if [ $file_name < now_time ]  
      then  
        
        # 判断文件夹是否存在,存在直接备份,不存在则创建      
          if [ !-d $BCK_LOGS_ROOT/$file_name ]  
          then
            mkdir -p $BCK_LOGS_ROOT/${line}
            echo "成功创建文件夹" 
          fi  
         #打包文件
            tar -zcvf ${line}.tar  ${line}   
            
            mv ${line}.tar ${BCK_LOGS_ROOT}/${file_name}
            echo "成功备份到指定文件夹" 
            # 删除已压缩备份的日志文件
            rm -f ${line}    
            echo "成功删除已经备份的文件" 
            echo "拷贝任务完成!" 
                
      else  
     
         end
        
      fi  
              
done < temps.log

# 删除临时文件
rm -f  temps.log    
fi

# 删除操作
if ($OPERATE_TYPE = 1) then
      
  while read line
do
     echo 
            
      file_name=`${line}##*.`
      if [ $file_name < now_time ]  
      then  
         rm -f ${line}
            
      else  
     
        end
        
      fi  
              
done < temps.log

# 删除临时文件
rm -f  temps.log
     
endif


请高手指点下,这个是我第一次些shell。
我的while语句不对,请问应该如何写。

------解决方案--------------------
c shell?
用这种循环。
Python code
set lines=`cat /etc/passwd`
set i=1
while ( $i <= $#lines )
    echo $lines[$i]
    @ i = $i + 1
end