shell学习4

本文介绍了几种常用的Linux命令,包括nl、strings、basename、dirname、bc及seq等,通过实例展示了如何利用这些命令进行文件处理、数学计算及序列生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1,nl

    计算行号过滤器。nl filename将会把filename文件的所有内容都输出到stdout上, 但是会在每个非空行的前面加上连续的行号,如果没有filename参数, 那么就操作stdin,nl命令的输出与cat -n非常相似, 然而, 默认情况下nl不会列出空行。

  
  1. [root@localhost shell]# cat 1 
  2. 1 2 3 
  3.  
  4. 2 3 4 
  5.  
  6. 3 4 5 
  7. 4 5 6 
  8. [root@localhost shell]# cat -n 1 #6行 
  9.      1  1 2 3 
  10.      2 
  11.      3  2 3 4 
  12.      4 
  13.      5  3 4 5 
  14.      6  4 5 6 
  15. [root@localhost shell]# nl 1 #注意看,只在非空行前面加上数字 
  16.      1  1 2 3 
  17.  
  18.      2  2 3 4 
  19.  
  20.      3  3 4 5 
  21.      4  4 5 6 
  22.  
  23. [root@localhost shell]# cat 1 | wc -l # 另外一种处理方法 

2,strings

   使用strings命令在二进制或数据文件中找出可打印字符。它将在目标文件中列出所有找到的可打印字符的序列,也可以用来检查一个未知格式的图片文件件。(strings image-file | more可能会搜索出像JFIF这样的字符串, 那么这就意味着这个文件是一个jpeg格式的。

  
  1. [root@localhost vuser]# file sed.jpg 
  2. sed.jpg: JPEG image data, JFIF standard 1.01 
  3. [root@localhost vuser]# strings sed.jpg | grep JFI* 
  4. JFIF 

3,basename 和 dirname 

   basename和dirname可以操作任意字符串,简单点说basename截取文件名,去掉路径。而dirname的作用恰好相反。只能说好用.....

  
  1. [root@localhost shell]# a=/home/max/shell 
  2. [root@localhost shell]# basename $a 
  3. shell 
  4. [root@localhost shell]# dirname $a 
  5. /home/max 

4,bc

   bc是个交互式的计算器,当然还有很强大的作用。

  
  1. [root@localhost shell]# bc #进入交互模式 
  2. bc 1.06 
  3. Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. 
  4. This is free software with ABSOLUTELY NO WARRANTY. 
  5. For details type `warranty'. 
  6. 1*2  #不仅仅支持乘法 
  7. 23%2 #取模也可以 
  8. obase=16 #设置进制 
  9. 123 #输入123回车后,输出16进制的123 
  10. 7B 
  11. 1*23 #输入1*23后,得23,也就是16进制的23 
  12. 17 

   你要乐意的话也可以采取下面这些方式

 

  
  1. [root@localhost shell]# echo "1+2*5" | bc 
  2. 11 
  3. [root@localhost shell]# echo '1+2*5' | bc 
  4. 11 
  5. [root@localhost shell]# echo 1+2*5 | bc # 重复了这么多下只是想说明些问题 
  6. 11 
  7. [root@localhost shell]# echo 1 + 2 * 5 | bc 
  8. (standard_in) 1: parse error 
  9. [root@localhost shell]# echo 1+2 * 5 | bc 
  10. (standard_in) 1: parse error 
  11. [root@localhost shell]# echo 1+2*5 | bc 
  12. 11 
  13. [root@localhost shell]# echo "2*8/4;1+2*5" | bc 
  14. 11 
  15. [root@localhost shell]# echo '2*8/4;1+2*5' | bc 
  16. 11 
  17. [root@localhost shell]# echo 'obase=16; 12' | bc 
  18. [root@localhost shell]# echo 'obase=16; (5*2)+1' | bc 
  19. [root@localhost shell]# echo 'obase=16;ibase=2;1101' | bc # 这个不难理解,obase说明输出时的进制,ibase说明输入时的进制,这句的意思是将2进制1101转换成16进制 

5,seq 

      用来生成一系列整数, 用户可以指定生成范围,每个产生出来的整数一般都占一行, 但是可以使用-s选项来改变这种设置。

  
  1. [root@localhost shell]# seq 3 # 产生3个数,默认步进是1 
  2. [root@localhost shell]# seq -s : 3 # 改变分隔符 
  3. 1:2:3 
  4. [root@localhost shell]# seq -s $ 3 # 你想用啥就用啥 
  5. 1$2$3 
  6. [root@localhost shell]# seq -s 1 3 # 来个数字1 
  7. 11213 
  8. [root@localhost shell]# seq -s # 3 # 注意了哦,直接#行不通?为什么呢? 
  9. seq:选项需要一个参数 -- s 
  10. 请尝试执行“seq --help”来获取更多信息。 
  11. [root@localhost shell]# seq -s /# 3 # 看见了吗?要对#进行转义,或者说让#不能有特殊的含义 
  12. 1/#2/#3 
  13. [root@localhost shell]# seq -s '#' 3 
  14. 1#2#3 
  15. [root@localhost shell]# seq -s "#" 3 
  16. 1#2#3 
  17. [root@localhost shell]# seq -s : 20 5 35 
  18. 20:25:30:35 

    seq可以用来产生 具有规律的一些文件,想想在foreach操作中是不是经常遇到一连串连续的数字呢?为啥不用seq来减少输入呢?来让我们试试:

  
  1. #!/bin/bash 
  2. # 进入特定目录用touch命令创建10个文件 
  3.  
  4. E_NOARGS=65 
  5. COUNT=10 
  6. PREFIX=file 
  7. if [ -z $1 ] 
  8. then 
  9.     echo "Usage: $0 directory" 
  10.     exit $E_NOARGS 
  11. fi 
  12.  
  13. cd $1 
  14.  
  15. for filename in `seq $COUNT` 
  16. do 
  17.   touch $PREFIX.$filename 
  18. done 
  19.  
  20. exit 0 

     shell需要不断的练习。

本文出自 “alkshao” 博客,请务必保留此出处http://alkshao.blog.51cto.com/1953382/514137

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值