linux复习2(shell脚本)

1. 编写shell脚本,逆序打印一行文本,如输入“welcome”,则输出为“emoclew”。

  1 read -p "Please input a String: " str
  2 len=${#str}                                                                            
  3 for((i=$len-1;i>=0;i--))        
  4 do         
  5     echo -e  "${str:$i:1}\c"    
  6 done       
  7 echo ""   

易错总结

1.read -p str 会将输入字符串打印出来
2.$ {#str} str字符串的长度
3.注意字符串str 最后一个数的索引为$len-1
4. {str: x :y} 读取字符串第x位开始数的y位
5.echo “” 作为字符串的结束符
6.echo -e " \c" 表示不换行读取

2. 编写shell脚本,将目录test1、test2、test3中的文件a1、a2、a3文件,改名为aa1、aa2、aa3。

1 mv test1/a1 test1/aa1
2 mv test2/a2 test2/aa2
3 mv test3/a3 test3/aa3      

易错总结

1.mv 文件名1 文件名2
2.当文件不在同一个目录下时,要指定对应的文件名
3.路径采用的是/ ,而不是\

3. 编写shell脚本,将当前目录下大于8K的文件转移到/tmp/file目录下。

  1 size=$[1024*8]                      
  2                                     
  3 for file in $(ls -l |awk '$5 > $size {print $9 }')                                     
  4 do                                  
  5     mv $file tmp/file               
  6 done                                
  7 echo Finshed                        
  8                                     
  9 ls -la  tmp/file 

易错总结

1.shell脚本中数据的计算 $[1024*8]
2.awk后面使用单引号
3.awk’$5 > $size { print $9 }’ awk中$5表示文件大小 $9表示文件名称
4.注意 $ 与()连用,而不是{}
5.显示某一目录下的文件 ls -la tmp/file

4. 编写shell脚本,把当前目录下所有后缀为“.sh”的文件后缀变更为“.shell” 。

  1 old=sh                      
  2 new=shell                   
  3 dir=$(eval pwd)             
  4 for file in $(ls $dir| grep  .${old})
  5 do                          
  6     name=$(ls ${file} | cut  -d. -f1)
  7     mv $file  ${name}.${new}                                                           
  8 done                        
  9 echo "Finshed"    

易错总结

1. ( e v a l p w d ) 切 换 到 执 行 命 令 的 目 录 2. g r e p . (eval pwd) 切换到执行命令的目录 2.grep . (evalpwd)2.grep.{old} 挑选对应后缀名的文件
3. ls $ dir 显示目录下所有的文件
4. 当字符串中存在除$ 以外其他的字符时,要使用$ { }
5.cut -d. f1 表示取以.为分隔符的第一个字段
6.当存在多个$ 内外嵌套时,外面使用() 里面使用{}
7.出现替换错误的原因使用错误 $应该匹配{ }
8.为了防止结束符错误,在程序的结尾加上echo " "

5. 编写shell脚本,把当前目录(包含子目录)下所有后缀为“.txt”的文件后缀变更为“.doc” 。

  1 function getdir ()
  2 {      
  3     for element in `ls $1`
  4     do 
  5         file_or_dir=$1"/"$element
  6         if [ -d $file_or_dir ];then
  7             getdir $file_or_dir
  8         else 
  9             if [ ${element##*.} = "txt" ];then
 10                 base=${file_or_dir%.txt}
 11                 mv $file_or_dir  ${base}.$new
 12             fi
 13         fi
 14     done
 15 }      
 16        
 17        
 18 old=txt                                                                                
 19 new=doc
 20        
 21 dir=$(eval pwd) 
 22        
 23 getdir $dir  

易错总结

1.路径使用的是/,而不是
2.KaTeX parse error: Expected '}', got '#' at position 9: {element#̲#*.} 表示文件名后缀 3.…{file_or_dir%.txt} 表示去掉字符串.txt后缀
5.注意`ls $1`等价于 $(ls $1)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值