shell-shell编程基础

向脚本中传递参数

shell 脚本传参方式是,直接在执行脚本时,在后面以空格连接变量即可。

$# 用来代表传入脚本参数个数;$@` 代表所有参数的内容。

shell 编程中的参数引用

引用参数 描述
0,1,2… 位置参数。从参数 0 开始,参数 0 代表启动脚本的程序名称。1代表第一个参数,2代表第二个参数。。。
* 以一个单字符串显示所有向脚本传递的参数。
@ 从参数 1 开始,显示所有向脚本传递的参数。
# 参数数量(不包含参数 0)
$ 脚本运行的当前进程 ID 号
后台运行的最后一个进程 ID 号
显示最后命令的退出状态
- 显示 shell 使用的当前选项,与 set 命令功能相同

注: 如果传入脚本的参数多于 9 个,则不能通过使用 $10 来引用第 10 个参数。必须处理或保存第一个参数($1),然后使用 shift 命令删除参数 1,并将所有剩余的参数下移一位,因此 $10 就变成了 $9,以此类推。

mv

描述

移动或重命名文件或目录。

mkdir

描述

创建一个或多个新的目录。

I/O 重定向

是程序,总难免输入输出。程序与外界的交互是程序功能强大与灵活的必要条件。

标准输入(0)、标准输出(1)与标准错误(2)

cat

描述

连接或显示文件。

注: 不要使用重定向符号 > 将输出重定向到输入文件之一。如果这么做,会丢失输入文件中的原始数据。

管道与重定向

shell 提供一下基本方法和标记,来改变默认输入端和输出端。

  • > 改变标准输出

    Command > file 将 command 的标准输出重定向到指定文件中,而不是打印到控制台上:

    1
    2
    3
    $ echo "redirect to file." > /tmp/a.txt
    $ cat /tmp.a.txt
    redirect to file.
  • < 改变标准输入

    Command < file 将 command 的标准输入想改为 file。

    1
    2
    3
    $ cat < /tmp/a.txt > /tmp/b.txt
    $ cat /tmp/b.txt
    redirect to file.
  • >> 追加文件

    Command >> file 可将 command 的输出追加到文件 file 末尾。

    1
    2
    3
    4
    $ echo "update a.txt" >> /tmp/a.txt
    $ cat /tmp/a.txt
    redirect to file.
    update a.txt
  • | 建立管道

    Command1 | Command2 将 command1 的标准输出与 command2 的标准输入相连。

    1
    2
    $ head -n10 /etc/passwd | grep "root"
    root:x:0:0:root:/root:/bin/bash

    注: 管道的数据共享在 Linux 内核是通过内存拷贝实现的。相较于 CPU 的运算,数据的移动往往更加耗时。

    描述

    显示一个文件或多个文件的前几行或前几个字节。

文件描述符

内核(kernel)利用文件描述符来访问文件。文件描述符是非负整数。

特殊文件的妙用

LInux 系统中有一些神奇的文件,例如 /dev/null/deb/zero/dev/tty

  • /dev/null

    /dev/null 像一个黑洞,所有写入他的内容都会永久消失。

  • /dev/zero

    /dev/zero 的主要用途是用来创建一个指定长度,并且初始化为空的文件,这种文件一般被用作临时交换文件懊恼。

  • /dev/tty

    /dev/tty 是一个很实用的文件。当程序打开这个文件时,UNIX/Linux 会自动将它重定向到当前所出的终端。

    基本文本检索(grep)

Linux 设计中有这样一个关键思想——“一切皆文件”。

grep 命令检索文本

grep 命令提供在文本中检索特定字符串的方法,并且支持正则表达式。grep 命令常与管道连用,用于在文本流中过滤出符合条件的文本行。

UNIX/Linux 系统的设计与 shell 编程

一切皆文件

ls

描述

显示目录内容。

UNIX 编程的基本原则

KISS

Keep It Simple,Stupid!


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!