学习笔记
1、本教程关注的是 Bash,也就是 Bourne Again Shell
- Bourne 目的地和边界
2、./test.sh #执行脚本
3、所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
4、echo “Hello World !” 打印语句
5、命名不能用bash里的关键字;命名只能用英文;中间不能有空格;不能用标点符号
6、量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
7、推荐给所有变量加上花括号,这是个好的编程习惯。
8、已定义的变量,可以被重新定义
9、使用 unset 命令可以删除变量,变量被删除后不能再次使用。unset 命令不能删除只读变量
10、单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
11、单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用
12、双引号里可以有变量
双引号里可以出现转义字符
13、echo expr index "$string" io
搜索io
以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。
14、$* 与 $@ 区别:
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。
算术运算符
-
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
-
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
条件表达式要放在方括号之间,并且要有空格,例如: [ b] 是错误的,必须写成 [ $a == $b ]
关系运算符
-eq (equal) 等于
-ne(not eq)不等于
-gt(greater than)大于
-lt(less than) 小于
-ge(great than or equal to) 大于等于
-le(less than or equal to)小于等于
注意上面的运算关系都是针对左边和右边比较的
布尔运算符
-o 或运算
-a 与运算
18、算术运算符,基本和c语言的相同
Shell echo 命令
- 显示变量
read 命令从标准输入中读取第一行,并把输入行的每个字段的值指定给shell变量 - 显示换行
echo -e”OK! \n” - 显示结果定向至文件
echo “It is a test” > testShell.sh
结果将文本写入到testShell文件里面去了 - 显示命令执行结果
echodate
注意这里使用了反引号`,而不是单引号
Shell test命令
- 字符串测试
= 等于则为真
-z字符串 字符串的长度为零则为真
-n字符串 字符串的长度不为零则为真 - 文件测试
-e 文件名 如果文件存在则为真
-f 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真
Shell还提供了与( -a (and))、或( -o(or) )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!“最高,”-a"次之,"-o"最低
Shell 函数
- 参数返回,可以显示:return 返回,如果不加,将以最后一条命令运行的结果,作为返回值,return 后跟数值n
- 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回 到您的终端。
-e 是判断文件是不是存在
输入/输出重定向
- 这样,本来需要从键盘获取输入的命令会转移到文件读取内容。
- 输出重定向是大于号(>),输入重定向是小于号(<)。
- $ wc -l users
2 users
也可以将输入重定向到 users 文件
$ wc -l < users
2
上面两个例子的结果不同:第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容。
文件包含
- 和其他语言一样,Shell也可以包含外部脚本,这样可以很方便的封装一些共用的代码作为一个独立的文件
- #使用 . 号来引用test1.sh 文件
. ./test1.sh 注意两个点中间有一个空格
提问
- chmod +x 什么意思?
就是给执行文件