• 第一章 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 .* 的结果也比你想象或需要的更多。

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

    1.8 使用shell引用

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

    1. [root@MaxwellDBA linux_learning]# echo A coffee is $5?!
    2. A coffee is ?!
    3. [root@MaxwellDBA linux_learning]# echo "A coffee is $5?!"
    4. A coffee is ?!
    5. [root@MaxwellDBA linux_learning]# echo 'A coffedd is $5?!'
    6. A coffedd is $5?!
    7. [root@MaxwellDBA linux_learning]# echo 'A coffee is $5 for' "$USER" '?!'
    8. A coffee is $5 for root ?!
    9. [root@MaxwellDBA linux_learning]# echo "A coffee is \$5 for $USER?\!"
    10. A coffee is $5 for root?\!
    11. [root@MaxwellDBA linux_learning]# echo "A coffee is \$5 for $USER?! "
    12. A coffee is $5 for root?!
    13. [root@MaxwellDBA linux_learning]#

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

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

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

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

    解决方案:

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

    1. [root@MaxwellDBA linux_learning]# type cd
    2. cd is a shell builtin
    3. [root@MaxwellDBA linux_learning]# type awk
    4. awk is /usr/bin/awk
    5. [root@MaxwellDBA linux_learning]# which cd
    6. /usr/bin/cd
    7. [root@MaxwellDBA linux_learning]# which awk
    8. /usr/bin/awk
    9. [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 确定是否处于交互模式

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

    解决方案:

    1. [root@MaxwellDBA ch01]# cat interactive.sh
    2. #! /usr/bin/env bash
    3. # filename : interactive
    4. case "$-" in
    5. *i*) # during interactive, run the code as below in shell
    6. ;;
    7. *) # during non-interactive, run the code as below in shell
    8. ;;
    9. esac
    10. [root@MaxwellDBA ch01]#
  • 相关阅读:
    Sqoop (一) --------- Sqoop 介绍
    视频博主都在用的 音频素材网,免费还可商用
    在 Apache Sedona 中处理空间栅格数据
    P1494 [国家集训队] 小 Z 的袜子
    【LeetCode】一周中的第几天+ 一年中的第几天
    学生网页设计作品 dreamweaver作业静态HTML网页设计模板 美食文化网页作业制作
    tensorflow中的slim函数集合
    Scanner、Random、stirng
    grafana 通过查询结果设置动态阈值
    `useState` 和 `useImmer` 都是 React 中用于管理状态的钩子
  • 原文地址:https://blog.csdn.net/u011868279/article/details/125473981