Linux Shell

linux

Posted by Kgod on October 10, 2019
次浏览

第1章

1.1 终端打印

echo
printf

1.2 玩转变量和环境变量

1.2.1 做好准备

查看运行环境变量:

1
2
3
cat /proc/$PID/environ
PID获取: pgrep gedit
cat /proc/12501/environ  | tr '\0' '\n'

1.2.2 怎么做

1
2
3
4
var=value  
var 是变量的名称,value是要分配的值。如果value不包含任何空格字符(如空格),则不必将其括在引号中,
否则必须将其括在单引号或双引号中。请注意,var = value和var=value 是不同的。
后者是赋值运算,而前者是相等运算。

通过使用 + 变量名称的前缀来打印变量的内容

1
2
3
var='value'
echo $var
OR echo ${var} 
1
2
3
4
#!/bin/bash
fruit=apple
count=5
echo "We have $count  ${fruit}(s)"

1.2.3 补充内容

  1. 获取字符串长度:length=${#var} ,echo ${#var}
  2. 识别当前shell版本:echo $0 / echo $SHELL
  3. 检查是否为超级用户:root用户的UID是0
  4. 修改BAsh提示字符串

1.3 通过shell进行数学运算

1
2
3
4
5
#!/bin/bash
no1=4;
no2=5;
let result=no1+no2
echo $result
1
2
let result=no1+no2
echo $result

递增运算:

1
let no1++

递减运算:

1
let no1--
1
2
let no+=6
let no-=6

它们分别等于let no=no+6和let no=no-6。

替代方法:

1
result=$[ no1 + no2 ]

$在[]运算符内部使用前缀是合法的,例如:

1
result=$[ $no1 + 5 ]

(( ))也可以使用。$ 使用(( ))运算符时,将使用带有变量名的前缀,如下所示:

1
result=$(( no1 + 50 ))

expr 也可以用于基本操作:

1
2
result=`expr 3 + 4`
result=$(expr $no1 + 5)

以上所有方法都不支持浮点数,并且仅对整数进行操作。

bc精度计算器是用于数学运算的高级实用程序。它具有多种选择。我们可以执行浮点运算并使用高级功能,如下所示:

1
2
3
4
5
6
echo "4 * 0.56" | bc
2.24
no=54; 
result=`echo "$no * 1.5" | bc`
echo $result
81.0

可以通过将bc分号作为定界符的附加参数传递给带有前缀的操作stdin。

指定小数精度(小数位数):在以下示例中,该scale=2 参数将小数位数设置为2。因此,的输出bc将包含一个带两位小数的数字:

1
2
echo "scale=2;3/8" | bc
0.37

使用bc进行基数转换:我们可以从一种基数系统转换为另一种基数系统。让我们将十进制转换为二进制,然后将二进制转换为八进制:

1
2
3
4
5
6
7
#!/bin/bash
no=100
echo "obase=2;$no" | bc
1100100
no=1100100
echo "obase=10;ibase=2;$no" | bc
100

平方和平方根的计算可以如下进行:

1
2
echo "sqrt(100)" | bc #Square root
echo "10^10" | bc #Square

1.4 播放文件描述符和重定向

文件描述符是与文件输入和输出关联的整数。他们跟踪打开的文件。最著名的文件描述符是stdin , stdout 和 stderr 。我们可以将一个文件描述符的内容重定向到另一个文件描述符。以下食谱将提供有关如何使用文件描述符进行操作和重定向的示例。

做好准备
在编写脚本时,我们经常使用标准输入(stdin),标准输出(stdout)和标准错误(stderr)。通过过滤内容将输出重定向到文件是我们需要执行的基本操作之一。命令输出一些文本时,它可以是错误消息,也可以是输出(非错误)消息。仅仅看一下就无法区分是输出文本还是错误文本。但是,我们可以使用文件描述符来处理它们。我们可以提取附加到特定描述符的文本。

1.5 数组和关联数组

数组是使用索引将数据集合存储为独立实体的非常重要的组件。

做好准备 Bash支持常规数组以及关联数组。常规数组是只能使用整数作为其数组索引的数组。但是关联数组是可以将字符串作为其数组索引的数组。

关联数组在许多类型的操作中非常有用。Bash 4.0版附带了对数组的关联支持。因此,较旧的Bash版本将不支持关联数组。

1.6 访问别名

别名基本上是一种快捷方式,可以代替键入长命令序列的位置。

做好准备
别名可以通过多种方式实现,方法是使用函数或使用alias命令。

1.7 抓取有关终端的信息

在编写命令行外壳脚本时,我们经常需要大量操作有关当前终端的信息,例如列数,行数,光标位置,掩码的密码字段等。此食谱有助于了解有关收集和操作终端设置的信息。

做好准备
tput 和 stty 是可用于终端操作的实用程序。让我们看看如何使用它们执行不同的任务。

1.8 获取,设置日期和延迟

许多应用程序要求以不同的格式打印日期,设置日期和时间以及根据日期和时间执行操作。延迟通常用于在程序执行期间提供等待时间(例如1秒)。脚本上下文(例如每五秒钟执行一次监视任务)需要了解程序中的写入延迟。此食谱将向您展示如何处理日期和时间延迟。

做好准备
日期可以多种格式打印。我们还可以从命令行设置日期。在类似UNIX的系统中,日期从1970-01-01 00:00:00 UTC开始以秒为单位存储为整数。这称为时代或UNIX时间。让我们看看如何读取日期并进行设置。

1.9 调试脚本

调试是每一种编程语言都应实现的重要功能之一,以便在发生意外情况时产生竞赛信息。调试信息可用于读取和了解导致程序崩溃或意外行为的原因。Bash提供了每个系统管理员都应该知道的某些调试选项。还有其他一些棘手的调试方法。

做好准备
调试shell脚本不需要任何特殊的实用程序。Bash带有某些标志,这些标志可以打印脚本采用的参数和输入。让我们来看看如何做。