把这几天的笔记记录如下:

1.赋值的一些办法

  1. variable1=`<file1`      #  将"file1"的内容放到"variable1"中.
  2. variable2=`cat file2`   #  将"file2"的内容放到"variable2"中.
  3. ############################################################
  4. var=`echo "one two three"` # 在这个方法中set --$var 后,有one=$1
  5. set -- $var                # two=$2,three=$3,其中$1,$2,$3是位置参数

2.重定向和文件描述符

  1. : > filename #将会把文件"filename"变为一个空文件(就是size为0),如果
  2. #文件不存在,就创建一个长度为0的文件(同touch)。
  3. N<>filename  #为了读写"filename", 把文件"filename"打开, 并且将文件描
  4. #描述符N分配给它。如果filename不存在,就创建。如果N没有
  5. #指定,那默认就是fd 0,stdin 。
  6. 示例
  7. echo 1234567890 > File    # 写字符串到"File".
  8. exec 3<> File             # 打开"File"并且将fd 3分配给它.
  9. read -n 4 <&3             # 只读取4个字符.
  10. echo -n . >&3             # 写一个小数点.
  11. exec 3>&-                 # 关闭fd 3.
  12. cat File                  # ==> 1234.67890
  13. 关闭文件描述符
  14. n<&-        # 关闭输入文件描述符n
  15. 0<&-, <&-   # 关闭stdin
  16. n>&-        # 关闭输出文件描述符n
  17. 1>&-, >&-   # 关闭stdout
  18. ####比较####
  19. ls -yz >> command.log 2>&1 # 将错误选项"yz"的结果放到
  20. # 文件command.log中,因为 stderr
  21. # 被重定向到这个文件中,所有的错误消息
  22. # 也就被指向那里了(进入command.log)。
  23. ls -yz 2>&1 >> command.log # 输出一个错误消息, 但是并不写到文件中
  24. exec <filename # 将stdin重定向到文件中

再给出一个脚本:

  1. /bin/bash
  2. # 使用'exec'重定向stdin.
  3. exec 6<&0          # 将文件描述符#6与stdin链接起来.
  4. # 保存stdin.
  5. exec < data-file   # stdin被文件"data-file"所代替.
  6. read a1            # 读取文件"data-file"的第一行.
  7. read a2            # 读取文件"data-file"的第二行.
  8. echo
  9. echo "Following lines read from file."
  10. echo "-------------------------------"
  11. echo $a1
  12. echo $a2
  13. echo; echo; echo
  14. exec 0<&6 6<&-
  15. #  现在将stdin从fd #6中恢复, 因为刚才我们把stdin重定向到#6了,
  16. #+ 然后关闭fd #6 ( 6<&- ), 好让这个描述符继续被其他进程所使用.
  17. #
  18. # <&6 6<&-    这么做也可以.
  19. echo -n "Enter data  "
  20. read b1  # 现在"read"已经恢复正常了, 就是能够正常的从stdin中读取.
  21. echo "Input read from stdin."
  22. echo "----------------------"
  23. echo "b1 = $b1"
  24. echo
  25. exit 0
  26. [max@localhost xx]$ clear
  27. [max@localhost xx]$ cat 2
  28. /bin/bash
  29. # 使用'exec'重定向stdin.
  30. exec 6<&0          # 将文件描述符#6与stdin链接起来.
  31. # 保存stdin.
  32. exec < data-file   # stdin被文件"data-file"所代替.
  33. read a1            # 读取文件"data-file"的第一行.
  34. read a2            # 读取文件"data-file"的第二行.
  35. echo
  36. echo "Following lines read from file."
  37. echo "-------------------------------"
  38. echo $a1
  39. echo $a2
  40. echo; echo; echo
  41. exec 0<&6 6<&-
  42. #  现在将stdin从fd #6中恢复, 因为刚才我们把stdin重定向到#6了,
  43. #+ 然后关闭fd #6 ( 6<&- ), 好让这个描述符继续被其他进程所使用.
  44. #
  45. # <&6 6<&-    这么做也可以.
  46. echo -n "Enter data  "
  47. read b1  # 现在"read"已经恢复正常了, 就是能够正常的从stdin中读取.
  48. echo "Input read from stdin."
  49. echo "----------------------"
  50. echo "b1 = $b1"
  51. echo
  52. exit 0

3. shell中函数返回值最大的正整数是255.‘

4.调试shell的方法有下面这些

a): echo语句可以放在脚本中存在疑问的位置上, 来观察变量的值, 也可以了解脚本后续的动作;

b): 使用过滤器tee来检查临界点上的进程或数据流;

c):设置选项-n -v -x

sh -n scriptname不会运行脚本, 只会检查脚本的语法错误. 这等价于把set -n或set -o noexec插入脚本中。注意, 某些类型的语法错误不会被这种方式检查出来。

sh -v scriptname将会在运行脚本之前, 打印出每一个命令. 这等价于把set -v或set -o verbose插入到脚本中。

选项-n和-v可以同时使用. sh -nv scriptname将会给出详细的语法检查。

sh -x scriptname会打印出每个命令执行的结果, 但只使用缩写形式。 这等价于在脚本中插入set -x或set -o xtrace。

把set -u或set -o nounset插入到脚本中, 并运行它, 就会在每个试图使用未声明变量的地方给出一个unbound variable错误信息.

d):使用"assert"(断言)函数在脚本的临界点上测试变量或条件;

e):使用变量$LINENO和内建命令caller;

f):用trap捕获exit等信号,捕获exit在某些情况下很有用, 比如说强制"打印"变量值。trap命令必须放在脚本中第一个命令的位置上。

trap '' SIGNAL (两个引号之间为空)在剩余的脚本中禁用了SIGNAL信号的动作。trap SIGNAL则会恢复处理SIGNAL的动作。当你想保护脚本的临界部分不受意外的中断骚扰, 那么上面讲的这种办法就非常有用了。

如下:

  1. trap '' 2  # 信号2就是Control-C, 现在被禁用了.
  2. command
  3. command
  4. command
  5. trap 2     # 重新恢复Control-C

用trap捕获exit信号,来触发操作的脚本示例:

  1. #!/bin/bash
  2. trap 'echo Variable Listing -----a = $a b = $b' EXIT
  3. echo "This prints before the \"trap\" --"
  4. echo "Even though the script sees the \"trap\" first."
  5. echo
  6. a=39
  7. b=36
  8. exit 0

输出一下结果:

  1. This prints before the "trap" --
  2. Even though the script sees the "trap" first.
  3. Variable Listing -----a = 39 b = 36

5。shell选项,shell有很多选项,如下图所示:

好了,这是这几天的笔记、、、、、

转载于:https://blog.51cto.com/alkshao/519996

Shell 学习(七)-----杂项相关推荐

  1. 【shell学习】missing-semester-3-编辑器Vim

    编辑器(Vim) 写英语单词和写代码是完全不同的活动.在编程时,与编写一长串文字相比,您需要花费更多的时间来切换文件.读取.导航和编辑代码.有不同类型的程序用于编写英文单词和代码(例如Microsof ...

  2. shell学习笔记 (2)

    shell学习笔记 (2) ---china.pub.com  linux shell电子书学习笔记 第2章 使用find和xargs find pathname -options [-print - ...

  3. STL源码剖析学习七:stack和queue

    STL源码剖析学习七:stack和queue stack是一种先进后出的数据结构,只有一个出口. 允许新增.删除.获取最顶端的元素,没有任何办法可以存取其他元素,不允许有遍历行为. 缺省情况下用deq ...

  4. 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等

    1 学习shell的目的性 写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作 ...

  5. OpenCV与图像处理学习七——传统图像分割之阈值法(固定阈值、自适应阈值、大津阈值)

    OpenCV与图像处理学习七--传统图像分割之阈值法(固定阈值.自适应阈值.大津阈值) 一.固定阈值图像分割 1.1 直方图双峰法 1.2 OpenCV中的固定阈值分割 二.自动阈值图像分割 2.1 ...

  6. PyTorch框架学习七——自定义transforms方法

    PyTorch框架学习七--自定义transforms方法 一.自定义transforms注意要素 二.自定义transforms步骤 三.自定义transforms实例:椒盐噪声 虽然前面的笔记介绍 ...

  7. Shell学习之结合正则表达式与通配符的使用(五)

    Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...

  8. Docker学习七:使用docker搭建Hadoop集群

    本博客简单分享了如何在Docker上搭建Hadoop集群,我的电脑是Ubuntu20,听同学说wsl2有些命令不对,所以建议在虚拟机里按照Ubuntu或者直接安装双系统吧 Docker学习一:Dock ...

  9. (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

    http://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么 ...

  10. Shell学习:关于替换命令-tr-ROT13法则

    Shell学习:关于替换命令-tr-ROT13法则     [root@stu100 ~]# echo abcdef|tr 'abcdef' 'xyzabc' xyzabc [root@stu100 ...

最新文章

  1. 【免费CDN】俄罗斯DDOS-Guard 支持ssl 防御1.5T
  2. Android属性动画源代码解析(超详细)
  3. python里split_python中split()的用法
  4. js防篡改对象之不可扩展对象
  5. asp.net mvc 缓存CaChe使用
  6. ruby .each_Ruby中带有示例的Array.each方法
  7. 送书 | 获得诺贝尔奖之后影响力会下降?绘制精英科学家的职业生涯路线图
  8. cnblog div+CSS 布局常识 8问
  9. 分治算法兵乓球比赛日程(java)
  10. (十三)java多线程之Timer
  11. ubuntu系统下hbase数据库的安装和使用,hbase配置文件详解
  12. jquery 自定义事件
  13. 动态规划解决分割问题
  14. Codeforces123E. Maze【树形dp】【概率dp】【证明题】
  15. 海康录像机能用别的摄像头吗_海康威视录像机NVR如何添加其它品牌(大华)摄像头...
  16. 卫星控制类操作系统VAX/VMS简介
  17. 数据基础---《利用Python进行数据分析·第2版》第12章 pandas高级应用
  18. 趣图:程序员的斗志曲线图
  19. MipMap(纹理过滤)
  20. NLP(四十八)使用kenlm进行文本纠错

热门文章

  1. ExtJs6入门-使用SenchaCmd命令创建第一个ExtJs6的HelloWorld项目
  2. 国际通用计算机编码,ASCII 编码(美国信息交换标准代码)完整对照表
  3. 白名单里的蓝桥杯“计算思维”竞赛到底考啥,有啥用处?
  4. 计算机组成原理的基本知识
  5. unity开始游戏代码_Unity的代码之夏开始
  6. 免费的uml建模工具
  7. CentOS Linux release 7.7-安装搜狗输入法、Pycharm无法输入中文解决
  8. matlab第八课:图像分析(下)
  9. VCIP2020:VVC SCC中基于镜像模式的IBC
  10. codeforces 19E Fairy 树链剖分