shell 基本学习

1)查看当前shell

echo $SHELL

2)查看兼容shell

more /etc/shells

3) 脚本第一行

#!/bin/bash

4) 变量(变量名称的开头是一个字母或下划线符号,后面可以接着任意长度的字母、数字或下划线符号)

first=isaac middle=bashevis last=singer   #单行可进行多次赋值
fullname="isaac bashevis singer"          #值中包含空格时使用引号
oldname=$fullname                         #此处不需要引号

不过,当你将几个变量连接起来时,就需要使用引号了:

fullname="$first $middle $last"           #这里需要双引号

5) 简单的 echo 输出

$ echo Now is the time for all good men
Now is the time for all good men

6) 华丽的 printf 输出

printf "hello, world\n"

 printf 不像 echo 那样会自动提供一个换行符号。你必须显示地将换行符号指定成 \n 。printf 命令的完整语法分为两部分:

printf format-string [arguments ...]
$ printf "The first program always prints '%s, %s!'\n" Hello world
The first program always prints 'Hello world!'

7) 基本的 I/O 重定向

以 < 改变标准输入

program < file 可将 program 的标准输入修改为 file:

tr -d '\r' < dos-file.txt

 * 以 > 改变标准输出

program > file  可将 program 的标准输出修改为 file:

tr -d '\r' < dos-file.txt > UNIX-file.txt

这条命令会先以 tr 将 dos-file.txt 里的 ASCII 回车删除,再将转换完成的数据输出到 UNIX-file.txt。(dos-file.txt 里的原始数据不会有变化)。

> 重定向符在目的文件不存在时,会新建一个。然而,如果目的文件已存在,它就会被覆盖掉;原本的数据都会丢失。

以 >> 附加到文件

program >> file 可将 program 的标准输出附加到 file 的结尾处。

如同 >,如果目的文件不存在,>>重定向符便会新建一个。然而,如果目的文件存在,它不会直接覆盖掉文件,而是将程序所产生的数据附加到文件结尾处:

for f in dos-file*.txt
do
    tr -d '\r' < $f >> big-UNIX-file.txt
done

以 | 建立管道

 program1 | program2  可将 program1 的标准输出修改为 program2 的标准输入。

tr -d '\r' < dos-file.txt | sort > UNIX-file.txt

8) tr 命令详解

tr [ options ] source-char-list replace-char-list

用途

  转换字符。例如,将大写字符转换成小写。选项可让你指定要删除的字符,以及将一串重复出现的字符浓缩成一个。

常用选项

- c

  取 source-char-list 的反义。tr 要转换的字符,变成未列在 source-char-list 中的字符。此选项通常与  -d 或 -s 配合使用。

- C

  与 -c 相似,但所处理的是字符(可能是包含多个字节的宽字符),而非二进制的字节值。

-d

  自标准输入删除 source-char-list 里所列的字符,而不是转换它们。

-s

  浓缩重复的字符。如果标准输入中连续重复出现 source-char-list 里的所列的字符,则将其浓缩成一个。

行为模式

  如同过滤器:自标准输入读取字符,再将结果写到标准输出。任何输入字符只要出现在 source-char-list 中,就会置换成 replace-char-list 里相应的字符。POSIX 风格的字符与等效的字符集也适用,而且 tr 还支持 replace-char-list 中重复字符的标记法。

警告

  根据 POSIX 标准的定义,-c 处理的是二进制字节值,而 -C 处理的是现行 locale 所定义的字符。

9) 特殊文件:/dev/null 与 /dev/tty

NIX 系统提供了两个对 Shell 编程特别有用的特殊文件。第一个文件 /dev/null,就是大家所熟知的位桶(bit bucket)。传说到此文件的数据都会被系统丢掉。也就是说,当程序将数据写到此文件时,会认为它已经成功完成写入数据的操作,但实际上什么事都没做。如果你需要的是命令的退出状态,而非它的输出,次功能会很有用。例如,测试一个文件是否包含某个模式:

if grep patten myfile > /dev/null
then
    ...      #找到模式时
else
    ...      #找不到模式时
fi

 相对地,读取 /dev/null 则会立即返回文件结束符号。读取 /dev/null 的操作很少会出现在 Shell 程序里,不过了解这个文件的行为模式还是非常重要的。

 另一个特殊文件为 /dev/tty 。当程序打开此文件时,UNIX 会自动将它重定向到一个终端 [ 一个实体的控制台或串行端口,也可能是一个通过网络与窗口登录的伪终端 ] 再也程序结合。这在程序必须读取人工输入时(例如密码)特别有用。此外,用它来产生错误信息也很方便,只是比较少人这么做:

printf "Enter new password: "   #提示输入
stty -echo                      #关闭自动打印输入字符的功能
read pass < /dev/tty            #读取密码
printf "Enter again: "          #提示再输入一次
read pass2 < /dev/tty           #再读取一次以确认
stty echo                       #别忘了打开自动打印输入字符的功能
#...

stty 命令用来控制终端的各种设置。 -echo 选项用来关闭自动打印每个输入字符的功能;stty echo 用来恢复该功能。

posted on 2015-12-02 10:08  清明-心若淡定  阅读(231)  评论(0编辑  收藏  举报