Linux程序设计第二章 shell程序设计 笔记

来源:互联网 发布:羽毛球比赛直播软件 编辑:程序博客网 时间:2024/04/28 19:57

1.Linux 哲学 首先在shell中实现工具的原型,确定之后再用其他编程语言进行实现。

2.文件描述符0代表程序的标准输入;文件描述符1代表标准输出;2代表标准错误输出;

  $ kill -HUP 1234 >killoutree.txt    2>killerr.txt

重定向符号 >  <  

管道符号  |

不要在命令流中使用相同的文件名

3.把脚本设置微可执行 chmod +x first

4.shell变量,不需要事先做出声明只要在勇的时候创建他们。使用$符号来获取变量内容

                       用read来读取内容到变量中

5.$ 取变量值

6.注释用#

7.shell里面调用其他shell

  • fork  ( /directory/script.sh)

fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.

运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。

sub-shell执行完毕后返回parent-shell. sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell

  • exec (exec /directory/script.sh)

exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本.  被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别

  • source (source /directory/script.sh)

与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.


8.#! /bin/bash  ubuntu 默认使用的是dash,功能较弱,用bsah能解决source not found 的问题

9.find 用于查找文件的命令

grep在文件中搜索字符串

简单的算术运算:expr

算术扩展:$((...))

参数扩展: ${i}_tmp

10.可以通过增加set 来决定调试选项,如set -o xtrace

11.特别注意if [ "$Q_MUSIC" = "1" ]; then      中 [  必须左右都有空格,不能跟左右的内容联在一起  ; ] 必须与左边的内容空开,不能联在一起

12.trap   trap 'commands' signal-list , trap命令在shell接收到signal list清单中数值相同的信号时,将执行双引号中的命令串

13.man帮助的解释是,允许后面的输出进行转义,假设你是 echo -e "i will use \n $HOME" 输出的将是

i will use

/root(当前用户的主目录)

如果是 echo "i will use \n $HOME" 则输出是:

i will use \n $HOME

14. 

脚本名称叫test.sh 入参三个: 1 2 3运行test.sh 1 2 3后$*为"1 2 3"(一起被引号包住)$@为"1" "2" "3"(分别被包住)$#为3(参数数量)
15.
# a=123,345,456,4567# echo ${a%%,*}123# echo ${a%,*}123,345,456
%是向左最大匹配
%%是向左最小匹配
16.if [ -n "$cdttitle" ];  
-n string 如果字符串不为空则结果为真
-z string 如果字符串为空则结果为真
判断cdttitle变量是否为空,如果cdttitle有内容则判断为真,无内容则执行else
17. shell中 用0 表示成功跟C 语言相反
18. $ls -l > lsoutput.txt  这条命令把ls命令的输出保存到文件lsoutput.txt中,如果该文件内容存在,文件的内容将被覆盖,
     $ls -l >> lsoutput.txt ,这条命令将会把命令的输出附加到制定文件的尾部
     $more < killout.txt 重定向输入
19. $()   $(())  ${}   的区别
$()用来做命令替换用(command substitution)的count=$(more iftmp|wc -l)
${ } 用来作变量替换。一般情况下,$var 与 ${var} 并没有啥不一样。
但是用 ${ } 会比较精确的界定变量名称的范围

 $(( )) 的用途吧:它是用来作整数运算的$ a=5; b=7; c=2
$ echo $(( a+b*c ))
19
20. set $(wc -l $title_file)  ,,,,set是为shell设置参数变量
wc(word count)功能说明:计算字数。语  法:wc [-clw][--help][--version][文件...]补充说明:利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。参  数:  -c或--bytes或--chars   只显示Bytes数。  -l或--lines   只显示列数。  -w或--words   只显示字数。  --help   在线帮助。  --version   显示版本信息。
21.如果字符串里包括空格,就必须勇引号把他们括起来。此外等号两边不能有空格
22.shell 调试-n 只读取shell脚本,但不实际执行
-x 进入跟踪方式,显示所执行的每一条命令
-c "string" 从strings中读取命令
23.等号两边的空格问题。
定义变量时, =号的两边不可以留空格,gender=femal
条件测试语句 [ 符号的两边都要留空格,if [ $gender = femal ]; then
条件测试的内容,如果是字符串比较的话, 比较符号两边要留空格,if [ $gender = femal ]!

原创粉丝点击