Shell 入门基本知识

1. 简介:


    Shell 是一种接口程序,用户可以通过它可以与 Unix/Linux 操作系统的核心程序进行交互。Bash 即 Bourne again shell ( /bin/bash )。Shell 程序相当于 dos 的批处理文件,一条命令就可以完成某项任务,也可以通过循环、条件控制、数学运算、文件测试、传递参数等方式完成复杂的管理任务。它提供个人化的用户环境,在 shell 的初始化文件 ( .profile, .login, .cshrc, .tcshrc 等)中完成,这些文件包括设置终端机键盘,定义窗口的特征,设置变量,定义查找路径,许可权限,提示符号和终端型以及设置特殊应用程序所需要的变量。


编写完 Shell 脚本之后,将它保存至文件中。通常情况下,我们需要改变脚本的运行方式:加上可执行权限再运行。


修改权限: chmod +x scriptName


执行:./scriptName


2. Shell 脚本中的特殊字符。




 1 双引号 ("") : 用来使 shell 无法认出空格、制表符和其他大多数特殊字符。不过有三个特殊值在双引号中不被忽略:$ , \ , ` 。
 2 单引号 ('') : 用来使 shell 无法认出所有特殊字符。单引号忽略所有的特殊字符。
 3 反引号 (``) : 用来替换命令。
 4 反斜杠 ( \ ) : 反斜杠是一般用作转义字符,或称逃脱字符,用来使 shell 无法认出以上的特殊字符,使其后的特殊字符失去特殊含义。
 5 分号 (;) : 允许在一行上放多个命令。
 6  & : 命令后执行。eg: ls -al &
 7 括号 () : 创建成组的命令。
 8 大括号 {} : 创建命令块。
 9 竖杠(|) : 管道标示符。
10 < > & : 表示重定向。
11  * ? [ ] ! : 表示模式匹配。
12  $ : 变量名的开头。
13  #: 表示注释(第一行除外)。
14  空格,制表符,换行符: 当做空白。


3. Shell 特性。


3.1. 别名:通过 alias 命令,用户可以给一些命令取别名,以减少键盘敲击次数。


eg: alias lt = `ls -alt`  # 即 lt 能够完成 `ls -alt`这命令干的活。


3.2. 命令替换:将命令的输出结果赋给一个变量,或将命令的输出结果代入字符串。使用反引号 `` 来执行命令替换。


eg: echo "The hour is `date`"  #其中 `date` 就是命令替换。


3.3. 后台处理:一个终端可以同时运行多个程序。使用方法:nohup command & 。查看后台命令使用:jobs -l


3.4. 管道(|) : 把一个命令的输出传递给另一个命令作为输入。


eg: ls | sort  # 将 ls 命令输出的结果排序。


3.5. 重定向(<, <<, >, >>): 与管道相关,可以改变程序运行的输入来源和输出地点。


<  输入重定向。 << 输入重定向。


>  输出重定向。 >> 输出重定向(追加)


3.6. 文件重定向:


1 输入文件——标准输入        0(缺省是键盘,也可以是文件或其他命令的输出)
2 输出文件——标准输出        1(缺省是屏幕,也可以是文件)
3 错误输出文件——标准错误     2(缺省是屏幕,也可以是文件)
改变程序运行的输入来源和输出地点:


1 command > filename        把标准输出重定向到一个新文件
2 command >> filename      把标准输出重定向到一个文件(追加)
3 command 1 > filename     把标准输出重定向到一个文件
4 command > filename 2 >&2    把标准输出和标准错误一起重定向到一个文件中
5 command 2 > filename      把标准错误重定向到一个文件中
6 command 2 >> filename    把标准输出重定向到一个文件中(追加)


1 command >> filename 2 > &1    把标准输出和标准错误一起重定向到一个文件中(追加)
2 command < filename > filename2     command 命令以 filename 文件作为标准输入,以 filename2 文件作为标准输出
3 command << delimiter    从标准输入中读入,直到遇到 delimiter 分界符
4 command < &m    把文件描述符 m 作为标准输入
5 command > &m    把标准输出重定向到文件描述符m中
6 command 2 < &-    关闭标准输入


eg: $grep "trd" book.txt 2 > /dev/null  # 把错误信息扔给 /dev/null ,/dev/null 不会保存错误信息,实质上就是丢失错误信息。


3.7. 模式匹配。用正则表达式来实现。


eg: ls *.txt #显示以 txt 为扩展名的文件。


3.8. 变量与运算符。




 1 变量用来存储信息,与 = 号之间不能有空格。
 2 本地变量:在用户现在的 shell 生命期的脚本中存在使用。
 3     eg: variablename=value  #设置变量名及值。
 4      $readonly [-p]  #查看当前设置的本地变量
 5  环境变量:用于所有用户进程(称为子进程)。登录进程称为父进程。shell 中执行的用户进程均称为子进程。环境变量可用于所有子进程,包括编辑器、脚本和各种应用程序。
 6     eg: export  用于设置环境变量    env  查看环境变量    readonly  如果使用了该命令,变量就不可以被修改或清除了。
 7     getenv()  访问一个环境变量,输入参数是需要访问的变量的名字。返回值是一个字符串,如果所访问的环境变量不存在,则返回 NULL 。
 8     setenv()  在程序里面设置某个环境变量的函数。
 9     unsetenv()  清除某个特定的环境变量的函数。
10 变量替换:用变量的值来替换它的名字。在变量名前加上 $ ,使用 echo 命令可以显示单个变量的值。
11     eg: var="123"; echo ${var}
12     echo ${varname}  # 显示实际值到 varname 中
13      echo ${varname:+value}  # 如果设置了 varname ,则显示其值value, 否则为空。
14      echo ${varname:?value}  # 如果未设置 varname,则显示用户自定义的错误信息 value。
15      echo ${varname:-value}  # 如果未设置 varname, 则显示其值 value,否则显示原来的值。
16      echo ${varname "=value}  # 如果未设置 varname, 设置其值为 value ,并显示。
17 位置变量:形式为 $0, $1, $2, $3, ... $9 。
18 标准变量:bash 默认建立了一些标准环境变量,可在 .profile 中定义。
19 特殊变量:
20     $# : 传递到脚本中参数个数。        $$ : 脚本运行的当前进程ID号
21     $* : 以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此项参数可超过 9 个。
22     $! : 后台运行的最后一个进程的 ID 号。    $@ : 与 $# 相同,但是使用时加上引号,并在引号中返回每个参数。
23     $- : 显示 shell 使用的当前选项,与 set 命令功能相同
24     $? : 显示最后命令的退出状态。0表示没有错误,其他任何值都表示有错误。
25 影响变量的命令:readonly, set, unset


4. Shell 的输入、输出控制


echo : 显示文本或变量,或者把字符串输入到文件中。-e : 表示解析转义字符。 -n : 回车不换行。 \c : 不换行。 \t : 跳格。 \n : 换行。


read : 从键盘或文件中的某一行文本中读入信息,并将其值赋给一个变量。如果只指定了一个变量,read 将会把所有的输入赋给该变量,直到遇到第一个文件结束符或回车。如果给出了两个变量,shell 将用空格作为变量之间的分隔壁符,如果变量少于单词数,那么第一个单词将赋给第一个变量,之后那部分全部赋给第二个变量。


cat : 可以用它来显示文件的内容。创建文件,还可以用它来显示控制字符。它会一下显示出完整文件的内容,不会在文件分页符处停下来。要想分页可以使用 more 或 pg 命令。


tee : 可以把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值