1. ()和{}

以{}括起来的全部命令视为一条命令,出现在管道的一边。例如:

{ echo "User Report for `date`."; who;} | pr

注意:{后面必须要有一个空格,}前必须要有分号,另外{}内的内容可以多行。

()可以完成与{}一样的效果,而且无需加空格和分号

注:()和{}有本质的区别是:()会生成新的子shell进程,而不会改变父shell的变量值及工作目录

(a="new value-1";echo $a)

2. 一些字符串测试

[ian@pinguino ~]$ test “abc” = “def” ;echo $?
1
[ian@pinguino ~]$ [ "abc" != "def" ];echo $?
0
[ian@pinguino ~]$ [ "abc" \< "def" ];echo $?
0
[ian@pinguino ~]$ [ "abc" \> "def" ];echo $?
1
[ian@pinguino ~]$ [ "abc" \< "abc" ];echo $?
1
[ian@pinguino ~]$ [ "abc" \> "abc" ];echo $?
1

3. 文件测试

-d 目录
-e 存在(也可以用 -a)
-f 普通文件
-h 符号连接(也可以用 -L)
-p 命名管道
-r 可读
-s 非空
-S 套接字
-w 可写
-N 从上次读取之后已经做过修改

-nt 测试 file1 是否比 file2 更新。修改日期将用于这次和下次比较。
-ot 测试 file1 是否比 file2 旧。
-ef 测试 file1 是不是 file2 的硬链接。

-o 操作符允许测试利用 set -o 选项 设置的各种 shell 选项,如果设置了该选项,则返回 True (0),否则返回 False (1)

[ian@pinguino ~]$ set +o nounset
[ian@pinguino ~]$ [ -o nounset ];echo $?
1
[ian@pinguino ~]$ set -u
[ian@pinguino ~]$ test -o nounset; echo $?
0

4. 组合和分组测试

[ian@pinguino ~]$ test “a” != “$HOME” -a 3 -ge 4 ; echo $?
1
[ian@pinguino ~]$ [ ! \( "a" = "$HOME" -o 3 -lt 4 \) ]; echo $?
1
[ian@pinguino ~]$ [ ! \( "a" = "$HOME" -o '(' 3 -lt 4 ')' ")" ]; echo $?
1

5.分配和测试算术表达式

[ian@pinguino ~]$ let x=2 y=2**3 z=y*3;echo $? $x $y $z
0 2 8 24
[ian@pinguino ~]$ (( w=(y/x) + ( (~ ++x) & 0x0f ) )); echo $? $x $y $w
0 3 8 16
[ian@pinguino ~]$ (( w=(y/x) + ( (~ ++x) & 0x0f ) )); echo $? $x $y $w
0 4 8 13

6. 使用 [[ 复合命令

[ian@pinguino ~]$ [[ ( -d "$HOME" ) && ( -w "$HOME" ) ]] &&
> echo “home is a writable directory”
home is a writable directory

7.用 [[ 进行通配符测试

[ian@pinguino ~]$ [[ "abc def .d,x--" == a[abc]*\ ?d* ]]; echo $?
0
[ian@pinguino ~]$ [[ "abc def c" == a[abc]*\ ?d* ]]; echo $?
1
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* ]]; echo $?
1

甚至还可以在 [[ 复合命令内执行算术测试,但是千万要小心。除非在 (( 复合命令内,否则 < 和 > 操作符会把操作数当成字符串比较并在当前排序序列中测试它们的顺序。清单 8 用一些示例演示了这一点。

[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || (( 3 > 2 )) ]]; echo $?
0
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || 3 -gt 2 ]]; echo $?
0
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || 3 > 2 ]]; echo $?
0
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || a > 2 ]]; echo $?
0
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || a -gt 2 ]]; echo $?
-bash: a: unbound variable

8.在 shell 中用 echo 和 $(( )) 直接进行计算

[ian@pinguino ~]$ echo $((3 + (4**3 /2)))
35

9.变量替换

${var-default} 表示如果变量 $var 还没有设置,则保持 $var 没有设置的状态,并返回后面的默认值 default。
${var=default} 表示如果变量 $var 还没有设置,则取后面的默认值 default。
${var+otherwise} 表示如果变量 $var 已经设置,则返回 otherwise 的值,否则返回空( null )。
${var?err_msg} 表示如果变量 $var 已经设置,则返回该变量的值,否则将后面的 err_msg 输出到标准错误输出上。

10. 标准变量(大部分都是环境变量)

EXINIT:保存使用vi初始化选项,如EXINIT='set nu tab=4';exprot EXINIT
IFS:域分隔符,默认是空格,可改边IFS=: 或 IFS=':'
HOME:主目录
LOGNAME:登录名
MAILCHECK:每隔多长时间检查是否有邮件
MAILPATH:用于多个邮箱时查看MAIL存储在哪几个文件中
TERM:终端类型
PATH:指定了当用户输入命令时linux搜索程序的目录由冒号:分隔,shell将按PATH中给出的顺序搜 索这些目录。找到的第一个与命令名称一致的可执行文件将被执行
TZ:时区
PS1:主提示符,其缺省值 '[\u@\h \w]\$ '
u:用户 h:主机名 w:当前的目录。最后的"$"是普通用户的提示符,特权用户是"#"
PS2:辅助提示符,一行中若需用多个命令时的提示符,缺省是">",如果用户在行末输入"\",然后 回车, 则会有改符号出现。
PWD:当前运行的进程号
$$:当前运行的进程号
$!后台运行的最后一个进程的ID
$- 显示shell使用的当前选项,与set相同
$? 显示最后命令的退出状态,0表示没有错误,其他表示错误。

11. 从文件路径字符串中提取有用信息

${var:pos} 表示去掉变量 $var 中前 pos 个字符。
${var:pos:len} 表示变量 $var 中去掉前 pos 个字符后的剩余字符串的前 len 个字符。
${var/pattern/replacement} 表示将变量 $var 中第一个出现的 pattern 模式替换为 replacement 字符串。
${var//pattern/replacement} 表示将变量 $var 中出现的所有 pattern 模式全部都替换为 replacment 字符串。

12 用 BASH 设计简单用户界面

select var in
do
statments use $var
done

#!/bin/bash

OPTIONS="Hello Quit"
select opt in $OPTIONS; do
if [ "$opt" = "Quit" ]; then
echo done
exit
elif [ "$opt" = "Hello" ]; then
echo Hello World
else
clear
echo bad option
fi
done

Linux Bash 笔记相关推荐

  1. (零)我为什么要写Linux学习笔记?

    我对Linux有强烈的好奇心,兴趣:写学习笔记会让我有成就感:我记忆力实在不好.好吧,其实真正原因是:如果我能把自己学到的知识简明扼要的讲出来,写出来,那便证明我真的学懂了我想学的知识.没时间怎么办? ...

  2. 跟着鸟哥学Linux系列笔记1

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...

  3. Linux 学习笔记之超详细基础linux命令 Part 3

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 2----------------- ...

  4. Linux 初步笔记

    这几篇博文主要记录博主的Linux 学习之路,用作以后回顾和参考.大家可以选择略过也可以作参考. (一)Linux 初步笔记 (二)Linux 进阶笔记(一) (三)Linux 进阶笔记(二) (四) ...

  5. 20155303狄惟佳预备作业三Linux学习笔记

    20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...

  6. Linux学习笔记10

    Linux学习笔记10 Linux学习笔记10 正则表达式 源码包约定目录 Shell脚本约定目录 Shell脚本的创建与执行 date命令 同步时间 Shell脚本预设变量 与用户交互 数学计算 S ...

  7. Linux学习笔记9

    Linux学习笔记9 Linux学习笔记9 history命令 管道符的使用 错误重定向错误追加重定向 变量 系统环境变量与个人环境变量的配置文件 Linux Shell中的特殊符号 cut命令 so ...

  8. Linux学习笔记5

    Linux学习笔记5 Linux学习笔记5 系统拥有哪些组 更改所属组 更改所属主 特殊权限 强制位set uid和set gid与冒险位sticky的作用都有什么 文件搜索 Linux的链接文件 系 ...

  9. Linux学习笔记4

    Linux学习笔记4 Linux学习笔记4 绝对路径与相对路径 查看当前目录 查看家目录 进入家目录 当前目录和上一级目录 创建目录 删除目录 创建一个文件 打印文字 重定向和追加重定向 删除文件 给 ...

最新文章

  1. 利用Python让你的命令行像坤坤一样会打篮球
  2. linux硬盘写0,linux – kworker消耗90%的IO和零磁盘写入
  3. 硬件数据手册中如何表示信号高低电平有效?
  4. Exadata X2-2 vs EMC Greenplum DCA vs Netezza TwinFin 12主要配置大对比
  5. 中国K12教育行业运营动向及未来发展战略分析报告2022年版
  6. C#处理鼠标和键盘事件
  7. html ul高度自适应,如何让div中的ul元素自适应
  8. mysql的空间查询函数_MYSQL空间查询函数
  9. redis报错MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist
  10. 通过哈希MD5实现加密(python3.X)
  11. 系统辨识 Identification Algorithm(基础篇)
  12. 微弱信号检测_移动电话/手机信号增强器/扩大器
  13. 生产排程系统_APS自动生产排程系统-用户常见问题及解答
  14. 竞品分析:网易云音乐和QQ音乐,音乐类app的战场
  15. 2017年2月16日-----------乱码新手自学.net 之MVC模型
  16. 360浏览器调试html5,360极速浏览器开发:调试指南
  17. uni-app 微信小程序端-AirKiss一键配网
  18. libxml主要函数说明
  19. 为什么我3岁的儿子有不良信用记录?儿童数据泄露问题暗潮汹涌
  20. Poi读取大数据量Excel文件

热门文章

  1. python语言教程-python基础教程
  2. python菜鸟基础教程-Python3 面向对象
  3. python处理excel字典-使用Python代码处理Excel
  4. python映射类型-详解Python中映射类型(字典)操作符的概念和使用
  5. python 命令行参数-Python3 命令行参数
  6. python编程词汇-基本 Python 词汇
  7. 使用最新目标跟踪框mmtracking实现自己的目标跟踪项目
  8. LeetCode Integer Break(整数拆分问题)
  9. OAuth2.0认证和授权原理
  10. nginx中的数组结构ngx_array_t