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)
8. #! /bin/bash ubuntu 默认使用的是dash,功能较弱,用bsah能解决source not found 的问题与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.
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) |
但是用 ${ } 会比较精确的界定变量名称的范围
$(( )) 的用途吧:它是用来作整数运算的$ 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 ]!