Linux学习记录(三)

来源:互联网 发布:堆排序算法n 编辑:程序博客网 时间:2024/05/20 12:51
1. if 和 then 要放在不同的行,同一行时,脚本运行出现语法错误。
 2. 脚本中用到赋值时,=号前后不能有空格;但(()) 双圆括号中是个例外 
 3. $0表示程序名称,$1表示第一个参数,以此类推,多个参数用空格分隔;
  3.1 如果参数本身带空格,用“”引号括起来
  3.2 如果参数多于9个,要用${10}, ${11}来表示,以此类推
  3.3 脚本中用$#表示输入参数的总个数,不包括命令名。
  3.4 $* 将所有参数表示为一个单词; $@将所有参数认为包含多个单词的长字符串
 4. 默认的分隔符号为空格、换行、tab,可通过环境变量$IFS改变。
 5. case 的")" 语句的最后,用;; 两个分号结束这个case,
 6. 判断表达式 【】、case、 for 等语句中的 中的$0、$1 等,需要加引号,否则会有死循环
 7. - 单杠是命令的选项, -- 双杠是命令的 参数, 注意这个区别。
 8. 获取用户输入:read var, -p 选项之后可以跟字符串提示,之后可以跟多个变量
  8.1 -t 选项可以输入等待输入的秒数,超出之后,返回非0 状态(linux中非0状态意味着命令执行失败,if条件测试命令执行的结果为假)
  8.2 -nx 选项指定仅接收x 个字符,输入达到x个字符之后就退出,不用输入回车
  8.3 -s 选项指定输入 不显示 (显示与背景色相同)
 
 9. 数据的显示----STDIN, STDOUT, STDERR分别用文件描述符(0,1,2),一个进程最多可以有9个打开的文件描述符
  9.1 重定向时,用相应的数字: 1>,2>可以将正常输出、错误输出分离。
  9.2 somebad commmand > output.txt , 输出的错误默认显示到屏幕上,而不会重定向到文件中。应该用: 2> 进行定向 
  9.3 通过 command 2> Error.txt 1> Result.txt 将命令的错误与正常输入进行分离。
  9.4 通过 &> 将所 STDOUT,STDERR的输出重定向到同一个文件,而且错误全部在前部分,正常输出在后面部分
  9.5 将输出重定向到某个文件描述符:>&n ----在文件描述符前加&即可。 echo "Test" >&2 将"Test"字符串发送到STDERR。
  9.6 永久重定向:exec 1>filename 可以将脚本中所有到STDOUT的输出重定向到filename中。
  9.7 脚本中,用 exec 2>filename , >&2 的方法将某些信息输出到文件后,或者用 0< filename重定向输入, 都会回不到原来的Shell,   所以尽量不要重定向0,1,2,而是用3~8 这几个未使用的descriptor.
  9.8 备份文件描述符: 
   exec 3>&1 # make 3 output to current 1( 将3表示的输出重定向到1表示的输出 ,即3现在重定向到了STDOUT)
   exec 1>file # 输出到1的,重定向到file中, 即:将原来输出到stdout的内容,输出到file中。
   do something...
   exec 1>&3 # 再将1重定向到3指向的输出,即:stdout,恢复到原来的状态 。
   
   对于stdin进行类似的备份操作:
   exec 6<&0 
   exec 0<file
   do something...
   exec 0<&6
  9.9 关闭文件描述符: exec 3>&- 将3关掉
  9.10 mktemp filename.XXXXXX 在当前目录下创建临时文件; mktemp -d dirname.XXXXXX在当前目录下创建临时目录 X必须是大写。
  9.11 /dev/null指示一个空文件,重定向到此文件时无输出
  9.12 tee filename 将输出到STDOUT的信息同时输出到filename中。 如:date | tee date.txt,将日期显示的同时保存到date.txt
    tee -a filename : 将数据append 到filename
  
 10. 关于脚本中的变量,任何时候引用,都要在变量前面加 $  号,忘记的话,脚本 就会出各种不易觉察的错误 。
 11. 关于脚本控制:
  11.1 进程停止 与进行 终止 是两回事。 ctrl+z 发出的是SIGSTOP, 而进程终止的信号是:SIGKILL,用kill 杀死进程时发出。为什么一定要用kill -9 才能杀死?
  11.2 捕获信号:trap commands_to_run SIGXXX,
  11.3 在命令后加&,将脚本放到后台运行
   1. 注意,后台运行的脚本,还是有显示输出到STDOUT,与其它的输入、输出混在一起。
  11.4 在不使用控制台的情况下继续执行脚本 : nohup 命令。
  11.5 $$可以用来显示Linux系统分配给脚本的PID号
  11.6 jobs命令查看作业号
  11.7 调度作业 : at [-f file] time :指定在具体时间执行命令。
0 0