菜鸟教程Shell script学习笔记(中)

以下内容是学习菜鸟教程之shell教程,所整理的笔记

菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.html

Shell基本运算符

注意: 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

  1. #!/bin/bash
  2. val=`expr 2 + 2`
  3. echo "两个数之和为:$val"
  4. 运行实例:
  5. 两数之和为:4
  6. 注意:表达式和运算符之间哟要有空格,这与我们熟悉的大部分编程语言不一样
  7. % 取余 `expr $b % $a`
  8. == 相等,用于比较两个数字,相同则返回true [$a == $b] 返回false
  9. != 不相等,用于比较两个数字,不相同则返回true {$ != $b}返回true
  10. 注意:条件表达式要放在方括号之间,并且要有空格。
  • 关系运算符
  1. 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
  2. 常见的关系运算符:
  3. a10b20
  4. -eq 检测两个数是否相等,相等则返回true [$a -eq $b]返回false
  5. -ne 检测两数是否不相等,不相等则返回true [$a -ne $b]返回true
  6. -gt 检测左边的数是否大于右边,如果是,则返回true [$a -gt $b]返回false
  7. -lt 检测左边的数是否小于右边,如果是,则返回true [$a -lt $b]返回true
  8. -ge 检测左边的数是否大于等于右边,如果是,则返回true [$a -ge $b]返回false
  9. -le 检测左边的数是否小于等于右边,如果是,则返回true [$a -le $b]返回true
  • 布尔运算符
  1. 常见的布尔运算符:
  2. 假定变量a10,变量b20
  3. 非运算,表达式为true则返回false,否则返回true [!false]返回true
  4. -o 或运算,有一个表达式为true则返回true [$a -lt 20 -o $b -gt 100]返回true
  5. -a 与运算,两个表达式都为true才返回true [$a -lt 20 -a $b -gt 100]返回false
  • 逻辑运算符
  1. shell的逻辑运算符:
  2. 假设变量a10,变量b20
  3. && 逻辑的and [[$a -lt $b -gt 100]]返回false
  4. || 逻辑的or ][[$a -lt 100 || $b -gt 100]]返回true
  • 字符串运算符
  1. 常见的字符串运算符:
  2. 假设变量a"abc",变量b"efg"
  3. -z 检测字符串长度是否为0,为0返回ture [-z"$a"]返回false
  4. -n 检测字符串长度是否为0,不为0返回true [-n"$"]返回true
  5. str 检测字符串是否为空,不为空返回true [$a]返回true
  • 文件测试运算符
  1. 文件测试符用于检测unix文件的各种属性
  2. 属性检测描述如下
  3. -b file 检测文件是否是块设备文件,如果是,则返回true [-b $file]返回false
  4. -c file 检测文件是复活是字符设备文件,如果是,则放回true [-c $file]返回false
  5. -d file 检测文件是否是目录,如果是,则返回true [-d $file]返回false
  6. -f file 检测文件是否是普通文件(即不是目录,也不是设备文件),如果是,则放回true [-f $file]返回true
  7. -g file 检测文件是否设置了SGID位,如果是,则返回true [-g $file]返回fasle
  8. -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true [-k $file]返回false
  9. -p file 检测文件是否是有名管道,如果是,则返回true [-p $file]返回false
  10. -u file 检测文件是否设置了SUID位,如果是,则返回true [-u $file]返回false
  11. -w file 检测文件是否科协,如果是,则返回true [-w $file]返回true
  12. -x file 检测文件是否可执行,如果是,则返回true [-x $file]返回true
  13. -s file 检测文件是否为空(文件大小是否大于0),不为空返回true [-s $file]返回true
  14. -e file 检测文件(包括目录)是否存在,如果是,则返回true [-e $file]返回true

Shell echo命令

Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。

  • 显示普通字符

    echo "It is a test" #双引号可省略 效果一样
  • 显示转义字符

    用\转义,显示\后面的字符 echo ""It is a test"" 输出:"It is a test"
  • 显示变量
  1. read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
  2. #!/bin/sh
  3. read name
  4. echo "$name It is a test"
  • 显示换行
  1. -n 显示换行 菜鸟上面显示-e开启转义,是错误的。
  2. echo -e "ok! \n"
  3. echo "It is a test"
  4. 输出:
  5. -e ok!
  6. It is a test
  • \c 显示不换行
  • 显示结果并写入文件

    echo "It is a test" > mylife
  • 原样输出字符串,不进行转义或取变量(用单引号)
  1. echo '$name\"'
  2. 输出:
  3. $name\"
  • xxx显示命令执行结果

    echo date

Shell printf命令

printf 由 POSIX 标准所定义,使用printf的脚本比echo移植性好。printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。

  • printf命令的语法:
  1. printf format-string [arguments]
  2. format-string:为格式控制字符串
  3. arguments:为参数列表
  4. eg:
  5. #!/bin/bash
  6. printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
  7. printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
  8. printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
  9. printf "%-10s %-8s %-4.3f\n" 郭芙 女 47.9876
  10. 执行脚本 输出如下
  11. ...
  12. %s %c %d %f都是格式替代符
  13. %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
  14. %-4.2f 指格式化为小数,其中.2指保留2位小数。
  15. 思考教程上例题:
  16. 教程上例题源码:
  17. #!/bin/bash
  18. printf "%d %s\n" 1 "abc"
  19. printf '%d %s\n' 1 "abc"
  20. printf %s abcdef
  21. printf %s abc def
  22. printf "%s\n" abc def
  23. printf "%s %s %s\n" a b c d e f g h i j
  24. printf "%s and %d \n"
  25. 执行结果:
  26. 1 abc
  27. 1 abc
  28. abcdefabcdefabc
  29. def
  30. a b c
  31. d e f
  32. g h i
  33. j
  34. and 0
  35. 以上结果我认为有误:
  36. 为什么 单个printf %s abcdef 输出的是abcdef 而不是abcdefabcdefabc
  • printf的格式指示符
  1. %b 相应的参数被视为有要处理的转义序列的字符串
  2. %c ASCLL字符,显示相对应参数的第一个字符
  3. %d,%i 十进制整数
  4. %e 浮点格式
  5. %E 浮点格式
  6. %f 浮点格式
  7. %g %e或%f转换,看哪个比较短,则删除结尾的零
  8. %G %E或%f转换,看哪个比较短,则删除结尾的零
  9. %o 不带正负号的八进制转换
  10. %s 字符串格式
  11. %u 不带正负号的十进制值
  12. %x 不带正负号的十六进制。使用af表示1015
  13. %X 不带正负号的十六进制。使用AF表示1015
  14. %% 字面意义的%
  • printf的转义序列
  1. \a 警告字符,通常为ASCIIBEL字符
  2. \b 后退(一位)
  3. \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
  4. \f 换页(formfeed
  5. \n 换行
  6. \r 回车(Carriage return
  7. \t 水平制表符
  8. \v 垂直制表符
  9. \ 一个字面上的反斜杠字符
  10. \ddd 表示13位数八进制值的字符,仅在格式字符串中有效
  11. \0ddd 表示13位的八进制的字符,仅在格式字符串中有效
  12. eg:
  13. printf "a string, no processing:<%s>\n" "A\nB"
  14. printf "a string, no processing:<%b>\n" "A\nB"
  15. printf "www.baiduu.com \a"

Shell test命令

Shell中的test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试

  • 数值测试
  1. -eq 等于则为真
  2. -ne 不等于则为真
  3. -gt 大于则为真
  4. -ge 大于等于则为真
  5. -lt 小于则为真
  6. -le 小于等于则为真
  7. eg:
  8. num1=100
  9. num2=100
  10. if test $[num1] -eq $[num2]
  11. then
  12. echo '两个数相等!'
  13. else
  14. echo '两个数不相等!'
  15. fi
  16. 代码中的[]执行基本的算数运算,如:
  17. #!/bin/bash
  18. a=5
  19. b=6
  20. result=$[a+b] #注意等号两边不能有空格
  21. echo "result 为:$result"
  • 字符串测试
  1. = 等于则为真
  2. != 不相等则为真
  3. -z字符串 字符串的长度为零则为真
  4. -n字符串 字符串的长度不为零则为真
  5. eg:
  6. num1="test"
  7. num2="test2"
  8. if test $num1 = $num2
  9. then
  10. echo '两个字符串相等!'
  11. else
  12. echo '两个字符串不相等'
  13. fi
  • 文件测试
  1. -e文件名 如果文件存在则为真
  2. -r文件名 如果文件存在且可读则为真
  3. -w文件名 如果文件存在且可写则为真
  4. -x文件名 如果文件存在且可执行则为真
  5. -s文件名 如果文件存在且至少有一个字符则为真
  6. -d文件名 如果文件存在且为目录则为真
  7. -f文件名 如果文件存在且为普通文件则为真
  8. -c文件名 如果文件存在且为字符型特殊文件则为真
  9. -b文件名 如果文件存在且为块文件则为真
  10. eg:
  11. #!/bin/bash
  12. cd /bin
  13. if test -e ./bash
  14. then
  15. echo '文件已经存在'
  16. else
  17. echo '文件不存在'
  18. fi
  19. 另外,Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低。例如:
  20. #!/bin/bash
  21. cd /bin
  22. if test -e ./notFile -o -e ./bash
  23. then
  24. echo '至少有一个文件存在!'
  25. else
  26. echo '两个都不存在!'
  27. fi

菜鸟教程之学习Shell script笔记(中)的更多相关文章

  1. 菜鸟教程之学习Shell script笔记(上)

    菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...

  2. 菜鸟教程之学习Shell script笔记(下)

    菜鸟教程Shell script学习笔记(下) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...

  3. bash shell学习-shell script基础 (笔记)

    A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux ...

  4. 菜鸟的《Linux程序设计》学习—shell script

    1. 认识shell script shell script是利用shell的功能缩写的一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面, ...

  5. bash shell学习-shell基础 (笔记)

    When you hoist the sails to cross the sea, you willride the wind and cleave the waves. "长风破浪会有时 ...

  6. 第13章 学习shell script

    由于博客园中dollar符号有别的意义,所以文中的dollar符号使用¥表示 第一个script [root@localhost script]# cat -n sh01.sh #!/bin/bash ...

  7. 学习shell script

    摘要:概述.script的编写.test命令.[]判断符号.默认变量($1...).if...then条件判断式. 一.概述 [什么是shell script] 针对shell所写的脚本,将多个命令汇 ...

  8. 学习shell脚本笔记

    1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; t ...

  9. 鸟哥的Linux私房菜之学习shell script

    运行程序的时候一般都是创建一个子程序来执行,所以子程序中的变量什么的在当前的shell下没法使用,但是如果使用source来执行就可以在当前shell下执行程序 shift 1 去掉第一个参数,后面接 ...

随机推荐

  1. @EnableScheduling注解

    @EnableScheduling 开启对定时任务的支持       其中Scheduled注解中有以下几个参数: 1.cron是设置定时执行的表达式,如 0 0/5 * * * ?每隔五分钟执行一次 ...

  2. The 19th Zhejiang University Programming Contest Sponsored by TuSimple (Mirror)

    http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=391 A     Thanks, TuSimple! Time ...

  3. 爬取网络图片到C盘存储的PermissionError: [Errno 13] Permission denied

    C盘根目录下不能拷进去文件,但可以新建文件夹的,“发生错误,操作被阻止,客户端没有所需的特权. 因为是系统目录,不要在里面拷贝文件,最好建立一个目录再放在里面. 硬要拷贝的话,可以使用管理员权限打开e ...

  4. 【java编程】java的关键字修饰符

    一.transient java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.换句话来说就是,用transient关键字标记的成员变量不参与序列化 ...

  5. leetcode中的python学习

    list.extend() list1.extend(list2(or string)) 将list2(or string)的所有元素添加到list1中: list1.append(list2(or ...

  6. idea 编译 内存不足

  7. github-上传自己的项目到github仓库

    参考链接: https://blog.csdn.net/m0_37725003/article/details/80904824 https://www.cnblogs.com/cxk1995/p/5 ...

  8. Linux下 USB设备驱动分析(原创)

    之前做过STM32的usb HID复合设备,闲来看看linux下USB设备驱动是怎么一回事, 参考资料基于韦东山JZ2440开发板,以下,有错误欢迎指出. 1.准备知识 1.1USB相关概念: USB ...

  9. 安装owncloud出现:Error while trying to create admin user: An exception occurred while executing

    安装owncloud出现:Error while trying to create admin user: An exception occurred while executing 1.安装ownc ...

  10. 生成用于ROM初始化的coe文件---使用matlab

    生成用于ROM初始化的coe文件---使用matlab t=0:2*pi/2^12:2*pi; y=0.5*sin(t)+0.5; r=ceil(y*(2^8-1)); fid = fopen('si ...