Shell脚本

        Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,毕竟它使用了Linux/Unix下的命令。        换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管线命令以及数据流重导向等功能,以达到我们所想要的处理目的 

shell和shell脚本的区别:

        shell是什么呢?确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚3至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。

交互式shell和非交互式shell

  交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
  shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
如下:
简单的实现系统巡检的命令:
date

[root@linuxprobe ~]# date
2020年 03月 30日 星期一 13:00:48 CST

 

free –m

[root@linuxprobe ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1826       1268        558         10          7        388
-/+ buffers/cache:        871        954
Swap:         2047          0       2047

 

 

df –Th

[root@linuxprobe ~]# df -Th
文件系统                         类型      容量  已用  可用 已用% 挂载点
/dev/mapper/rhel_linuxprobe-root xfs        18G  3.8G   14G   22% /
devtmpfs                         devtmpfs  905M  4.0K  905M    1% /dev
tmpfs                            tmpfs     914M  140K  914M    1% /dev/shm
tmpfs                            tmpfs     914M  8.9M  905M    1% /run
tmpfs                            tmpfs     914M     0  914M    0% /sys/fs/cgroup
/dev/sr0                         iso9660   3.5G  3.5G     0  100% /mnt
/dev/sda1                        xfs       497M  125M  373M   26% /boot

 

 

写成一个简单的脚本test.sh
#!/bin/bash
date
free –m
df –Th
chmod +x test.sh
./test.sh

[root@linuxprobe ~]# ./test.sh 
2020年 03月 30日 星期一 13:02:50 CST
             total       used       free     shared    buffers     cached
Mem:          1826       1266        560         10          7        388
-/+ buffers/cache:        870        956
Swap:         2047          0       2047
文件系统                         类型      容量  已用  可用 已用% 挂载点
/dev/mapper/rhel_linuxprobe-root xfs        18G  3.8G   14G   22% /
devtmpfs                         devtmpfs  905M  4.0K  905M    1% /dev
tmpfs                            tmpfs     914M  140K  914M    1% /dev/shm
tmpfs                            tmpfs     914M  8.9M  905M    1% /run
tmpfs                            tmpfs     914M     0  914M    0% /sys/fs/cgroup
/dev/sr0                         iso9660   3.5G  3.5G     0  100% /mnt
/dev/sda1                        xfs       497M  125M  373M   26% /boot

 

 

 

shell 脚本中-d,-e,-f的区别

查看文件或者目录是否存在,经常用到-d,-e,-f,其中区别如下

-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于

shell脚本的常用命令

cat,head,tail命令

1.求/etc/passwd文件第20行内容

[root@linuxprobe ~]# cat -n /etc/passwd | head -20 | tail -1
    20    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

 

rev,tac命令

rev左右颠倒

tac上下颠倒

find命令

常用选项
-name
-type
-user
-nouser
-group
-nogroup
-mtime
-size
可以使用 -o 或者 -a 连接多个条件
可以使用-exec或者-ok来执行shell命令

find /etc/ -name hosts -exec cp {} /tmp/ \;

如:

find /var/logs -type f -mtime +7 -exec rm {} \;

计划任务crond和crontab

*/10 * * * * 脚本|命令

&命令

当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。
xclock -update 1 & 后台运行

nohup命令

如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用 n o h u p命令。该命令可以在你退出帐户之后继续运行相应的进程。 N o h u p就是不挂起的意思( n o hang up)。
该命令的一般形式为: nohup command &
nohup xclock -update 1 &

shell的通配符

*
?
[...]和[!...] [a-z] [0-9] [!a12d]
{..}

echo命令

-e 使转义符生效 如: 解释\t \n含义
-n 不换行输出
字颜色:30—–37 
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”

[root@linuxprobe ~]# echo -e "\033[31m 红色字 \033[0m"
 红色字

字背景颜色范围:40—–47 
echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
echo -e “\033[42;37m 绿底白字 \033[0m”
echo -e “\033[43;37m 黄底白字 \033[0m”
echo -e “\033[44;37m 蓝底白字 \033[0m”
echo -e “\033[45;37m 紫底白字 \033[0m”
echo -e “\033[46;37m 天蓝底白字 \033[0m”
echo -e “\033[47;30m 白底黑字 \033[0m

[root@linuxprobe ~]# echo -e "\033[41;37m 红底白字 \033[0m"
 红底白字

 

printf命令

[root@linuxprobe ~]# printf aa
aa[root@linuxprobe ~]#
[root@linuxprobe ~]# printf "aa\n"
aa

格式化输出

[root@linuxprobe ~]# printf "%s,%s,%d\n" good job 123
good,job,123

  %s 字符串 %d十进制整数

 read命令

可以使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只指定了一个变量,那么 read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。
如:
赋值

[root@linuxprobe ~]# read name
zhang san
[root@linuxprobe ~]# echo $name
zhang san

 赋多值

[root@linuxprobe ~]# read firstname lastname
zhang san 
[root@linuxprobe ~]# echo $firstname $lastname
zhang san
[root@linuxprobe ~]# echo $firstname
zhang
[root@linuxprobe ~]# echo $lastname
san

 

交互式

[root@linuxprobe ~]# read -p "输入姓名: " name
输入姓名: zhang san
[root@linuxprobe ~]# echo $name
zhang san

 

|管道命令

管道(Pipe)实际是用于进程间通信的一段共享内存. 创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机
管道命令的两个作用:
1.管道两边产生两个子进程
2.前一个进程的标准输出和后一个进程的标准输入

注意以下情况不能赋值
echo 123 | read aa
echo $aa

重定向(文件描述符)

文件描述符:进程连接到文件时,获得的一个标记.当进程操作文件时,首先
打开文件 获得打开文件的一个状态,给它一个标记 成为文件描述符
0标准输入
1标准输出
2标准错误输出

> >> 定向符(重定向) >覆盖 >>追加
1> 标准正确输出,文件存在则覆盖,不存在则创建
1>> 标准正确输出,文件存在则追加,不存在则创建
2> 标准错误输出,文件存在则覆盖,不存在则创建
2>> 标准错误输出,文件存在则追加,不存在则创建
&> 标准正确和标准错误输出,文件存在则覆盖,不存在则创建

cat < /dev/sda > /dev/null 测试改变文件描述符

ls >cleanup.out 2>&1
在上面的例子中,我们将 ls命令的输出重定向到 cleanup.out文件中,而且其错误也 被重定向到相同的文件中。
2>&1 标准错误输出定向到标准正确输出

  < 输入重定向 后边跟的是文件 > >>
<< here document 后边跟的是一个文本
如下

[root@linuxprobe ~]# cat >a.txt <<EOF
> dsadsadsa
> cxzcxzcxz
> qwewqewqe
> EOF
[root@linuxprobe ~]# cat a.txt 
dsadsadsa
cxzcxzcxz
qwewqewqe

[[root@linuxprobe ~]# fdisk /dev/sda <<EOF
> n
>
> +200M
> w
> EOF

<<<here string 后边跟字符串 直接交给文本 如:

[root@linuxprobe ~]# cat>a.txt <<<kkkkk
[root@linuxprobe ~]# cat a.txt 
kkkkk

 tee命令

tee命令作用可以用字母 T来形象地表示。它把输出的一个副本输送到标准输出,另一个 副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件, 这种情况可以使用tee命令
如:

[root@linuxprobe ~]# who | tee aa.txt
root     :0           2020-03-31 17:01 (:0)
root     pts/0        2020-03-31 17:01 (:0)
[root@linuxprobe ~]# cat aa.txt 
root     :0           2020-03-31 17:01 (:0)
root     pts/0        2020-03-31 17:01 (:0)

 

[root@linuxprobe ~]# find /etc -name hosts | tee bb.txt
/etc/avahi/hosts
/etc/hosts
[root@linuxprobe ~]# cat bb.txt 
/etc/avahi/hosts
/etc/hosts

sort命令

Linux sort命令用于将文本文件内容加以排序。

sort可针对文本文件的内容,以行为单位来排序。

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]

 

  • -b 忽略每行前面开始出的空格字符。
  • -c 检查文件是否已经按照顺序排序。
  • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  • -f 排序时,将小写字母视为大写字母。
  • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  • -m 将几个排序好的文件进行合并。
  • -M 将前面3个字母依照月份的缩写进行排序。
  • -n 依照数值的大小排序。
  • -u 意味着是唯一的(unique),输出的结果是去完重了的。
  • -o<输出文件> 将排序后的结果存入指定的文件。
  • -r 以相反的顺序来排序。
  • -t<分隔字符> 指定排序时所用的栏位分隔字符。
  • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  • --help 显示帮助。
  • --version 显示版本信息。
[root@linuxprobe ~]# cat aa.txt 
2
4
3
21
90
78
45
23
2
3
5
1
[root@linuxprobe ~]# sort aa.txt 
1
2
2
21
23
3
3
4
45
5
78
90
[root@linuxprobe ~]# sort -n aa.txt 
1
2
2
3
3
4
5
21
23
45
78
90
[root@linuxprobe ~]# sort -n -r aa.txt    按完整数字排序 降序
90
78
45root
23
21
5
4
3
3
2
2
1
[root@linuxprobe ~]# sort -u aa.txt  去掉重复值 
1
2
21
23
3
4
45
5
78
90

[root@linuxprobe ~]# sort -t: -k3nr /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
never:x:1004:1004::/home/never:/bin/bash
shitianle:x:1003:1003::/home/shitianle:/bin/bash
tom:x:1002:1002::/home/tom:/bin/bash

 

uniq命令(默认去掉连续的重复值)

Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。

uniq 可检查文本文件中重复出现的行列。

 

uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
  • -c或--count 在每列旁边显示该行重复出现的次数。
  • -d或--repeated 仅显示重复出现的行列。
  • -f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
  • -s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
  • -u或--unique 仅显示出一次的行列。
  • -w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。

 

[root@linuxprobe ~]# cat qq.txt 
2
4
4
3
3
21
90
78
45
23
2
3
5
1
[root@linuxprobe ~]# sort -n qq.txt |uniq -u
1
5
21
23
45
78
90
[root@linuxprobe ~]# cat qq.txt 
2
4
4
3
3
21
90
78
45
23
2
3
5
1
[root@linuxprobe ~]# sort -n qq.txt | uniq -d 
2
3
4
[root@linuxprobe ~]# sort -n qq.txt | uniq -d -c
      2 2
      3 3
      2 4

grep 命令

linux grep 命令用于查找文件里符合条件的字符串。

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

 

  • -a 或 --text : 不要忽略二进制的数据。
  • -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。( 后 N 行)
  • -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
  • -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。(前N 行)
  • -c 或 --count : 计算符合样式的列数。(统计匹配次数)
  • -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。(前后N行)
  • -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
  • -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
  • -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
  • -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
  • -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
  • -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
  • -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
  • -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
  • -i 或 --ignore-case : 忽略字符大小写的差别。
  • -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。(显示文件名)
  • -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
  • -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。(显示行号)
  • -o 或 --only-matching : 只显示匹配PATTERN 部分。
  • -q 或 --quiet或--silent : 不显示任何信息。
  • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。(递归)
  • -s 或 --no-messages : 不显示错误信息。
  • -v 或 --revert-match : 显示不包含匹配文本的所有行。(取反)
  • -V 或 --version : 显示版本信息。
  • -w 或 --word-regexp : 只显示全字符合的列。
  • -x --line-regexp : 只显示全列符合的列。(精确匹配)
  • -y : 此参数的效果和指定"-i"参数相同。

 

[root@linuxprobe ~]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@linuxprobe ~]# grep halt$ /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt

[root@linuxprobe ~]# grep -A 2 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@linuxprobe ~]# grep -B 2 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@linuxprobe ~]# grep -C 2 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@linuxprobe ~]# grep -c root /etc/passwd
2

 

 

cut命令

Linux cut命令用于显示每行从开头算起 num1 到 num2 的文字。

cut  [-bn] [file]
cut [-c] [file]
cut [-df] [file]

 

 

使用说明:

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

参数:

  • -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
  • -c :以字符为单位进行分割。
  • -d :自定义分隔符,默认为制表符。
  • -f :与-d一起使用,指定显示哪个区域。
  • -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
    范围之内,该字符将被写出;否则,该字符将被排除

 

[root@linuxprobe ~]# head -10  /etc/passwd| cut -d: -f 1,3 
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
mail:8
operator:11
[root@linuxprobe ~]# head -10  /etc/passwd| cut -d: -f 1-3 
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4
sync:x:5
shutdown:x:6
halt:x:7
mail:x:8
operator:x:11

 

 tr命令

 

Linux tr 命令用于转换或删除文件中的字符。

tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。

tr [-cdst][--help][--version][第一字符集][第二字符集]  
tr [OPTION]…SET1[SET2]

 

  • -c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
  • -d, --delete:删除指令字符
  • -s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
  • -t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
  • --help:显示程序用法信息
  • --version:显示程序本身的版本信息

 

字符集合的范围:

  • \NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)
  • \\ 反斜杠
  • \a Ctrl-G 铃声
  • \b Ctrl-H 退格符
  • \f Ctrl-L 走行换页
  • \n Ctrl-J 新行
  • \r Ctrl-M 回车
  • \t Ctrl-I tab键
  • \v Ctrl-X 水平制表符

 

[root@linuxprobe ~]# echo helooooooo worddddddd | tr -s [a-z]
helo word
[root@linuxprobe ~]# head -10 /etc/passwd |tr [a-z] [A-Z]
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
SHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN
HALT:X:7:0:HALT:/SBIN:/SBIN/HALT
MAIL:X:8:12:MAIL:/VAR/SPOOL/MAIL:/SBIN/NOLOGIN
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN

 

 wc命令

Linux wc命令用于计算字数。

利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

wc [-clw][--help][--version][文件...]
  • -c或--bytes或--chars 只显示Bytes数。
  • -l或--lines 只显示行数。
  • -w或--words 只显示字数。
  • --help 在线帮助。
  • --version 显示版本信息。
  •   m 统计字符数。这个标志不能与 -c 标志一起使用。
  •   -L 打印最长行的长度。

数目中包含目录本身)

[root@linuxprobe ~]# ls -l /tmp/ |wc -l
56

 

split命令

 

inux split命令用于将一个文件分割成数个。

该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。

 

split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
  • -<行数> : 指定每多少行切成一个小文件
  • -b<字节> : 指定每多少字节切成一个小文件
  • --help : 在线帮助
  • --version : 显示版本信息
  • -C<字节> : 与参数"-b"相似,但是在切 割时将尽量维持每行的完整性
  • [输出文件名] : 设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号

 

[root@linuxprobe ~]#cat /etc/passwd >> zz.txt
[root@linuxprobe ~]# split -6 zz.txt 
[root@linuxprobe ~]# ls
 zz.txt  xaa  xae  xab  xaf  xac  xag  xad  xah

 

 eval命令

Linux eval命令用于重新运算求出参数的内容。

eval可读取一连串的参数,然后再依参数本身的特性来执行。

 

eval [参数]

 

 

[root@linuxprobe ~]# aa="tail -1 /etc/passwd"
[root@linuxprobe ~]# echo $aa
tail -1 /etc/passwd
[root@linuxprobe ~]# eval $aa
never:x:1004:1004::/home/never:/bin/bash

 

 

date命令

Linux date命令可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下:

时间方面:

 

[root@linuxprobe ~]# date
2020年 03月 31日 星期二 19:32:14 CST
[root@linuxprobe ~]# date +%F-%H:%M:%S
2020-03-31-19:34:17
[root@linuxprobe ~]# date +%F-%H:%M:%S
2020-03-31-19:34:17

 

 

 bc命令

bc 命令是任意精度计算器语言,通常在linux下当计算器用。

它类似基本的计算器, 使用这个计算器可以做基本的数学运算。

常用的运算:

  • + 加法
  • - 减法
  • * 乘法
  • / 除法
  • ^ 指数
  • % 余数

 

[root@linuxprobe ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
3-1
2
2*2
4
3*3
9
2/2
1
5/2
2
5%2
1
5^2
25

 

输入 quit 退出。

小数:

[root@linuxprobe ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
scale=5
7/3
2.33333

 

转换进制:

[root@linuxprobe ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
ibase=10;obase=2
10
1010
2
10

 

 非交互式:

[root@linuxprobe ~]# echo "3*3" | bc
9

 

 

 ||逻辑或 前边命令失败执行后边命令
&&逻辑与 前边命令成功运行后边命令