shell 脚本之获取命令输出字符串以及函数参数传递

﹏ヽ暗。殇╰゛Y 2022-07-14 12:37 180阅读 0赞



在ubuntu 14.04之后,所有的U盘挂载也分用户之分,最近很多操作也和U盘有关,所以就研究了一上午shell脚本函数以及字符串操作的方法。

#

字符串操作:

  1. 获取他的命令输出比较简单,打个简单的比方,我想获取whoami 的用户名,那么直接可以使用如下代码。
  2. ```sh
  3. #!/bin/sh
  4. USER_NAME=$(whoami)
  5. main() {
  6. sudo cp target/* /media/$USER_NAME/rootfs/ -rf
  7. }
  8. main
  9. ```
  10. ```sh
  11. #如果你想操作这些字符串的话,那么可以有以下方法
  12. #shell中截取字符串的方法有很多中,
  13. ${expression}一共有9种使用方法。
  14. ${parameter:-word}
  15. ${parameter:=word}
  16. ${parameter:?word}
  17. ${parameter:+word}
  18. #上面4种可以用来进行缺省值的替换。
  19. ${#parameter}
  20. # 上面这种可以获得字符串的长度。
  21. ${parameter%word} 最小限度从后面截取word
  22. ${parameter%%word} 最大限度从后面截取word
  23. ${parameter#word} 最小限度从前面截取word
  24. ${parameter##word} 最大限度从前面截取word
  25. # 上面4个就是用来截取字符串的方法了。
  26. # 有了着四种用法就不必使用cut命令来截取字符串了
  27. #第一种又可以分为四种情况,下面一一介绍。
  28. #1、使用 # 号操作符。用途是从左边开始删除第一次出现子字符串即其左边字符,保留右边字符。用法为#*substr,例如:
  29. str='http://www.你的域名.com/cut-string.html'
  30. echo ${str#*//}
  31. # 得到的结果为www.你的域名.com/cut-string.html,即删除从左边开始到第一个"//"及其左边所有字符
  32. #2、使用 ## 号操作符。用途是从左边开始删除最后一次出现子字符串即其左边字符,保留右边 字符。用法为##*substr,例如:
  33. str='http://www.你的域名.com/cut-string.html'
  34. echo ${str##*/}
  35. # 得到的结果为cut-string.html,即删除最后出现的"/"及其左边所有字符
  36. #3、使用 % 号操作符。用途是从右边开始删除第一次出现子字符串即其右边字符,保留左边字符。用法为%substr*,例如:
  37. str='http://www.你的域名.com/cut-string.html'
  38. echo ${str%/*}
  39. # 得到的结果为http://www.你的域名.com,即删除从右边开始到第一个"/"及其右边所有字符
  40. #4、使用 %% 号操作符。用途是从右边开始删除最后一次出现子字符串即其右边字符,保留左边字符。用法为%%substr*,例如:
  41. str='http://www.你的域名.com/cut-string.html'
  42. echo ${str%%/*}
  43. # 得到的结果为http://www.你的域名.com,即删除从右边开始到最后一个"/"及其右边所有字符
  44. # 第二种也分为四种,分别介绍如下:
  45. # 1、从左边第几个字符开始以及字符的个数,用法为:start:len,例如:
  46. str='http://www.你的域名.com/cut-string.html'
  47. echo ${var:0:5}
  48. # 其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
  49. # 结果是:http:
  50. 2、从左边第几个字符开始一直到结束,用法为:start,例如:
  51. str='http://www.你的域名.com/cut-string.html'
  52. echo ${var:7}
  53. # 其中的 7 表示左边第8个字符开始
  54. # 结果是:www.你的域名.com/cut-string.html
  55. # 3、从右边第几个字符开始以及字符的个数,用法:0-start:len,例如:
  56. str='http://www.你的域名.com/cut-string.html'
  57. echo ${str:0-15:10}
  58. # 其中的 0-6 表示右边算起第6个字符开始,10 表示字符的个数。
  59. # 结果是:cut-string
  60. # 4、从右边第几个字符开始一直到结束,用法:0-start,例如:
  61. str='http://www.你的域名.com/cut-string.html'
  62. echo ${str:0-4}
  63. # 其中的 0-6 表示右边算起第6个字符开始,10 表示字符的个数。
  64. # 结果是:html
  65. # 注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
  66. ```sh

#

函数参数传递

  1. #!/bin/sh
  2. SDCARD_BOOT=/media/chen_7109/boot
  3. SDCARD_ALL=/media/chen_7109/*
  4. # Copy image to sd card boot partition
  5. mycptosd() {
  6. cp am335x-sbc7109.dtb MLO u-boot.img uEnv_emmc.txt uEnv.txt zImage /media/chen_7109/boot/ -rf
  7. sync
  8. echo "Copy Image to sdcard over ....."
  9. }
  10. # The main function
  11. main () {
  12. if [ -e $SDCARD_BOOT ]; then
  13. mycptosd
  14. if [ 1 -eq $# ]; then
  15. if [ "$1" = "umount" ]; then
  16. sudo umount $SDCARD_ALL
  17. else
  18. echo "Please input arguments "umount" to umount sd card"
  19. fi
  20. else
  21. echo "You can input arguments of "umount" to umount sd card"
  22. fi
  23. else
  24. echo "No such file of sd card boot partition"
  25. fi
  26. }
  27. # Main Start ....
  28. if [ 1 -eq $# ];then
  29. main $1
  30. else
  31. main
  32. fi
  33. 上面这个脚本中,本来要传递到main的一个参数的,我一开始以为在shell 外面直接带一个参数就可以传到main()函数内部,
  34. 发现这样是不可以的,shell里面的函数调用的时候参数是独立的参数,所以只能用main $1 的方式将参数传递进去。

发表评论

表情:
评论列表 (有 0 条评论,180人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c#参数传递输出参数

    上文介绍了引用参数,下面来介绍一个更加低调冷艳屌炸天的一个参数传递技能,叫做输出参数。这个基本跟前面那个差不多,就是把前面的ref换成out,到这里啰嗦一句,个人觉得面向对象语

    相关 Shell脚本参数传递

    > 在许多的情况下,Shell脚本都需要接受用户的输入,根据用户的输入参数来执行不同的操作。本节内容主要介绍Shell脚本的参数,以及如何在脚本中接收参数。 Shell脚本