shell脚本概述

1.1 shell概述

shell是一个用C语言编写的程序,它是用户使用linux的桥梁。shell既是一种命令语言,又是一种程序设计语言。

1.2 shell脚本结构

   1、开头:#!/bin/sh或#!/bin/bash  符号#!用来告诉系统,这个脚本需要什么解释器来执行。

   2、注释:以#开头的行表示注释。

   3、命令行的书写规则:一行一条命令 若一行多个命令,用(;)来分割,长命令可以使用反斜线字符(\)分割。

1.2.1shell脚本的创建

打开文本编辑器(可以使用vi/vim命令来创建文件),新建一个文件test.sh,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,如果用php写shell脚本,扩展就用php就可以。

最简单的输出:

#!/bin/bash
echo "Hello World !"

 

 

 

 上面这是执行脚本的一种方式

第二种方式:

 

 1.3 变量

1.3.1 系统变量

系统定义的变量 意义
BASH=/bin/bash Bash Shell 名称
BASH_VERSION=4.1.2(1) Bash版本
HOME=/home/linuxtechi 用户家目录
LOGNAME=Linuxtechi 当前登录用户的名字
OSTYPE=Linux 操作系统的类型
PATH=/usr/bin:/sbin/:/bin:/usr/sbin 可执行文件搜索路径
PWD=/home/linuxtechi 当前工作目录
SHELL=/bin/bash Shell名称
USERNAME=linuxtechi 当前登录的用户名

1.3.2 自定义变量

命名变量:

变量名=变量值

name=lny
echo $name
lny

 

 1.3.3 特殊变量

特殊变量 含义
$$ Shell本身的PID
$! Shell最后的运行后台process的PID
$? 最后运行的命令结束代码(返回值)
$- 使用set命令设定的flag一览
$* 所有参数列表。如"$*"用["]括起来的情况、以"$1 $2...$n"的形式输出参数
$@ 所有参数列表。如"$@"用["]括起来的情况、以"$1""$2"..."$n"的形式输出所有参数。
$# 添加到shell的参数个数
$0 shell本身的文件名
$1~$n 添加到shell的各参数值。$1是第1参数、$2是第2参数..。

PID是进程控制符,是属于各进程的身份标识,程序一运行系统就会自动分配给进程独一无二的PID,进程中止PID会被系统自动回收,可能会被继续分配给新运行的程序。

#!/bin/bash

echo "Shell 传递参数实例!"
echo "执行的文件名:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "第三个参数为:$3"
为脚本设置可执行权限,并执行脚本,输出结果如下所示:

chmod +x test.sh 
./test.sh 1 2 3

Shell 传递参数实例!
执行的文件名:./test.sh 1 2 3
第一个参数为:1
第二个参数为:2
第三个参数为:3

1.3.4 变量赋值

变量的赋值使用 "="

例子:

x=6
a="welcome to beijing"

引号的区别

单引号('  '):所有转义符全部关闭,完整的展现出引号中的原始内容。

双引号("  "):部分转义符关闭,但某些则保留(如:$)

 

反引号(`  `): 反引号中内容作为一个系统命令并执行(结合了传参的方式)

 

 

1.3.5 变量的调用

在变量名面前加一个$符号

name=linux
echo $name
linux

1.3.6 read从键盘读入内容

用法:

read -p "提示信息" username

read -p "请输入用户名:" username
read -p "请输入密码:"  password
echo -e "Login success,Welocome,$username"

 

1.4 cut、sort、uniq、wc命令详解

1.4.1cut

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

参数:

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

实例:

1、显示/etc/grub.conf里第1个字符

cut -c1 /etc/grub.conf

2.显示/etc/grub.conf里第1个到第20个字符

cut   -c1-20   /etc/grub.conf

3.显示/etc/passwd里,以冒号分隔的第1列到第3列

cut  -d':'  -f1-3   /etc/passwd

4.显示/etc/passwd里,以冒号分隔的第1列和第3列

cut  -d':' -f1,3   /etc/passwd

1.4.2 sort

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

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

参数 含义
-b 忽略每行前面开始的空格字符
-c 检查文件是否已经按照顺序排序
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
-f 排序时,将小写字母视为大写字母
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并
-M 将前面3个字母依照月份的缩写进行排序
-n 依照数值的大小排序
-o<输出文件> 将排序后的结果存入指定的文件
-r 以相反的顺序来排序
-u 去除重复行
-t<分割字符> 指定排序时所用的栏位分割字符
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

例子

1、查看/etc/passwd里的内容并且正向排序

sort /etc/passwd

2、去除重复行

 

 3、反向排序

sort默认的排序方式是升序(不识别十位数)

 4、将排序的内容输出到指定的文件

 

 5、按照数值大小排序

 

 6、sort -t和-k的用法

根据第二列数据进行排序

 

 1.4.3 uniq

参数 含义
-i 忽略大小写字符的不同
-c 进行计数
-u 只显示唯一的行

例子:

1、排序之后删除了重复行,同时在行首位置输出该行重复的次数

sort 11.txt | uniq -c

 

 2、仅显示存在重复的行,并在行首显示该行重复的次数

sort 11.txt | uniq -dc

 

3、仅显示不重复的行

sort 11.txt | uniq -u

 

 1.4.4 wc

wc命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

参数 含义
-c 显示文件的Bytes数(字节数)及文件名输到屏幕上
-l 将每个文件的行数及文件名输出到屏幕上
-m 将每个文件的字符数及文件名输出到屏幕上,如果当前系统不支持多字节字符将其显示与-c参数相同的结果
-w 将每个文件含有多少个词及文件名输出到屏幕上
-L 显示最长一行字符数

例子:

wc -l /etc/passwd
22 /etc/passwd

cat /etc/passwd | wc -l
25

echo    `123456` | wc -L 
6

 

 1.5 find文件查找工具

1.5.1find工具详情

参数 说明
-type 类型
-name 以什么*命名的
-iname 以参数的效果和指定“-name”参数类似,但你忽略字符大小写的差别
-mtime 修改时间
-ctime 创建时间
-maxdepth find命令查找的最大深度(tree -L 1 -d)
-size 文件大小(大于1M是+1M)
-perm 按照文件权限来查找文件
-user 按照文件属主来查找文件
-group 按照文件所属的组来查找文件
-inum 根据inode号查找文件

查找文件

find ./ -type f

 

 查找目录

find ./ -type d

 

 

 

 查找名字为test的文件或目录

find ./ -name test

查找文件名匹配*.c的文件

find ./ -name '*.log'

打印test文件名后,打印test文件的内容

find ./ -name test -print -exec cat {} \;

不打印test文件名,只打印test文件的内容

find ./ -name test -exec cat {} \;

查找文件更新日时在距现在时刻二天以上的文件

find ./ -mtime +2

查找空文件并删除

find ./ -empty -type f -print -delete

查找权限为644的文件或目录(需完全符合)

find ./ -perm 664

查找有执行权限但没有可读权限的文件

find ./ -executable \! -readable

查找文件size小于10M的文件或目录

find ./ -size -10M
posted @ 2020-11-17 16:13  速溶咖啡  阅读(279)  评论(0编辑  收藏  举报