第一章 Bash 入门

什么是shell? 为什么要关注shell ?

shell 是Unix上运行的一个程序。shell 的工作就是为用户执行其他程序

1.1 为什么是bash

bash 提供了shell 程序员所需要的编程特性和命令行用户喜爱的各种便利。

1.2 Bash shell

bash 是一种shell,就是命令解释器。bash主要目的是让用户可以同计算机操作系统交互。以便完成想做的任何任务。shell 脚本编程 允许你对此类任务进行自动化以实现易用性、可靠性以及重现性。

1.3 提示符揭秘

$ 通常表明你是以普通用户身份登录的

# 表明你是root, root账户是系统管理员,root 无所不能,可以执行任何操作。

~表示所在的是主目录。

1.4 显示当前位置

pwd : print working directory (打印工作目录)的缩写

-L 显示当前的逻辑路径

-P 显示当前的物理路径

1.5 查看并运行命令

type, which ,apropos, locate, slocate, find and ls

 1.6 获取文件的相关信息

使用ls,stat,file或find命令

ls 命令只显示文件名

-l 选项可以提供每个文件更详细的信息。

-a 不隐藏以.(点号)开头的文件

-A 与-a相似,但不显示两个常见的目录.和..,因为每个目录中都有这两项。

-F 文件名结尾以下列类型标识符之一显示文件类型。

/ 表示该文件是目录

* 表示该文件是可执行文件

@ 表示符号链接。

= 表示套接字

| 表示FIFO缓冲。

-l 使用长列表格式

-L 显示链接目标文件的信息,而非符号链接本身

-Q引用名(quote name) (GNU扩展,仅部分系统支持)

-r 逆序排列

-R 递归显示子目录

-S 按照文件大小排序

-l 使用短格式,每行只显示一个文件

1.7 显示当前目录下的所有隐藏(点号)文件

ls -a 可以显示出包含隐藏文件字的文件在内的所有文件,但这种输出往往包含了过多的干扰项,而ls -a .* 的结果也比你想象或需要的更多。

[root@MaxwellDBA linux_learning]# ls -la
total 0
drwxr-xr-x  3 root root 17 Jun 26 21:33 .
drwxr-xr-x. 4 root root 41 Jun 27 18:51 ..
drwxrwxr-x  4 root root 30 Jun 26 21:34 tmp
[root@MaxwellDBA linux_learning]# 

1.8 使用shell引用

将字符串放进单引号中,除非字符串中包含需要shell进行插值的元素。

[root@MaxwellDBA linux_learning]# echo A coffee is $5?!
A coffee is ?!
[root@MaxwellDBA linux_learning]# echo "A coffee is $5?!"
A coffee is ?!
[root@MaxwellDBA linux_learning]# echo 'A coffedd is $5?!' 
A coffedd is $5?!
[root@MaxwellDBA linux_learning]# echo 'A coffee is $5 for' "$USER" '?!'
A coffee is $5 for root ?!
[root@MaxwellDBA linux_learning]# echo "A coffee is \$5 for $USER?\!"
A coffee is $5 for root?\!
[root@MaxwellDBA linux_learning]# echo "A coffee is \$5 for $USER?! "
A coffee is $5 for root?! 
[root@MaxwellDBA linux_learning]# 

无法在对一对单引号再嵌入另一个单引号,使用反斜线也不行,因为单引号内不会执行任何插值操作。解决办法: 使用双引号以及转义字符,或者在单引号对之外转义单引号。

# 我们会得到一个示意继续输入的提示符,因为目前的引号并不对称。
[root@MaxwellDBA linux_learning]# echo '$USER won't pay $5 for coffee.'
> ^C
# 错误
[root@MaxwellDBA linux_learning]# echo "$USER won't pay $5 for coffee."
root won't pay  for coffee.
# 有效
[root@MaxwellDBA linux_learning]# echo "$USER won't pay \$5 for coffee."
root won't pay $5 for coffee.
#同样有效
[root@MaxwellDBA linux_learning]# echo 'I won'\''t pay $5 for coffee.'
I won't pay $5 for coffee.
[root@MaxwellDBA linux_learning]#

1.9 使用或替换内建命令与外部命令

问题: 你想用自己编写的函数或外部命令替换内建命令,还想知道脚本究竟执行的是哪种命令。(例如: 是/bin/echo还是内建echo)

解决方案:

用type和which命令查看指定命令是否存在,并确定其是内建命令还是外部命令。

[root@MaxwellDBA linux_learning]# type cd
cd is a shell builtin
[root@MaxwellDBA linux_learning]# type awk
awk is /usr/bin/awk
[root@MaxwellDBA linux_learning]# which cd
/usr/bin/cd
[root@MaxwellDBA linux_learning]# which awk
/usr/bin/awk
[root@MaxwellDBA linux_learning]# 

内建命令: 内建在shell自身中的命令

外部命令: 由shell运行的外部文件。外部文件可以是二进制文件,也可以是shell脚本。

可以用enable命令来关闭或启用内建命令。不过强烈建议不要这么做,除非你有十足的把握知道自己在做什么。 enable -a 可以列出所有内建命令及其当前的状态(启用或禁用)

内建命令的问题在于你无法使用-h 或--help选项获得使用帮助。

要想避开优先级更高的函数或内建命令,而强制使用外部命令,可以利用enable -n 关闭shell内建命令或用command忽略shell函数。

例如: enable -n test, 然后执行test,此时运行的就不再是内建命令,而是$PATH中的test.

1.10 确定是否处于交互模式

问题: 你手边有些代码,希望仅在处于(或不处于)交互模式时运行

解决方案:

[root@MaxwellDBA ch01]# cat interactive.sh
#! /usr/bin/env bash
# filename : interactive

case "$-" in
    *i*) # during interactive, run the code as below in shell
    ;;
    *) # during non-interactive, run the code as below in shell
    ;;
esac
[root@MaxwellDBA ch01]# 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值