Shell脚本
什么是shell脚本?
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务
例如我们可以执行一些命令:ifconfg ls cd mkdir,这些命令shell会传递给系统执行相对的操作
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
常用的shell解释器
-
Bourne Shell(/usr/bin/sh或/bin/sh)
-
Bourne Again Shell(/bin/bash)
-
C Shell(/usr/bin/csh)
…
Linux标准默认的shell是bash,就是/bin/bash
shell脚本的语法
-
脚本名一般以.sh为后缀
-
脚本内容第一行为声明解释器: #/bin/bash或者#/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序
-
在脚本中我们用 # 来表示注释,可以对一些操作做一些说明,便于阅读
-
命令书写的规则:
-
我们在脚本中一般一行只写一个命令
#!/bin/bash echo "Hello World"
-
如果需要在一行写多个命令,命令之间需要加 ;
#!/bin/bash mkdir /opt/dir;cd /opt/dir
-
如果有写命令特别长我们也可以用 \
#!/bin/bash yum -y install mysql\ mysql-server \ php \ php-mysql \ httpd
-
变量
-
自定义变量
-
变量的命名规则:包含大小写字母、数字、下划线而且是以字母或下划线开头,最长20个字母
变量区分大小写
格式:
变量名='值'
注意变量名和等号之间不能有空格
-
例子:
name=tom age=18
-
引用变量,在变量名前加**$**符号就可以引用了
#!/bin/bash name=tom age=18 echo "我的名字是:$name,我今年:$age"
-
-
系统变量
-
常用的系统环境变量
USER: 当前系统登录的用户
HOME:用户家目录
PATH: 可执行文件搜索路径
PWD: 当前目录
-
-
特殊变量
-
常用的特殊变量:
$$: 获取脚本的PID
$?: 最后运行命令的返回值
$0: 获取脚本的文件名
$1,$2,$3… 获取脚本的参数
$* 获取所有参数的值
$@ 获取所有参数的值
$# 获取参数的个数
-
变量的作用范围
-
局部变量
在脚本中定义的变量只生效于该脚本。
例如脚本A.sh和脚本B.sh,在A.sh中定义的变量,在B.sh中就不可以被使用
-
环境变量
环境变量是可以在任何地方被引用的,无论在哪个脚本中都可以被使用的,我们定义环境变量,一般需要修改/etc/profile文件定义
定义环境变量需要在变量名前添加:export
交互:read
-
从命令行读取一个值赋予给变量,一般用于交互
语法格式:
read -ep "题是内容" 变量名
shell中的引号
-
双引号
""
在双引号内部可以引用变量
-
单引号
''
单号号内部是不可以引用变量,他会将内部的所有的字符,都转换成普通的字符串
-
反引号
``
反引号内部的内容,会被当成命令去执行
shell中的运算符
cut切割
- 功能:从一行中切割部分内容
- 命令格式:
cut 选项 文件
-
常用的选项:
-d:设置分隔符
-f:指定分割后的域
-c:按字符分割
-
例子:
-
获取/etc/passwd文件以**😗* 为分割符的第一个域,其实就是查看系统有哪些用户!
[root@node-163 ~]# cut -d : -f 1 /etc/passwd root bin daemon adm lp sync shutdown halt
-
获取以:为分割符的第1个域和第3个域,就是用户名和UID
[root@node-163 ~]# cut -d : -f 1,3 /etc/passwd root:0 bin:1 daemon:2 adm:3 lp:4 sync:5 shutdown:6 halt:7 mail:8 uucp:10 operator:11
-
获取1到4的域
cut -d : -f 1-4 /etc/passwd root:x:0:0 bin:x:1:1 daemon:x:2:2 adm:x:3:4 lp:x:4:7 sync:x:5:0 shutdown:x:6:0
-
获取eth0的ip地址
[root@node-163 ~]# ifconfig eth0 | grep Mask | cut -d : -f 2 | cut -d ' ' -f 1 192.168.189.163
-
sort排序
-
功能: 用来对文本进行排序
-
命令格式:
1.sort 选项 文本文件 2.cat 文本 | sort 选项
-
常用的参数:
-r: 降序,默认为升序
-n: 以纯数字排序
-
例子:
按升序
[root@node-163 ~]# cat num.txt | sort 1 10 11 12 13 2 3 4 5 6 7 8 9
-
按降序
[root@node-163 ~]# cat num.txt | sort -r 9 8 7 6 5 4 3 2 13 12 11 10 1
-
按纯数字排序
[root@node-163 ~]# cat num.txt | sort -rn 13 12 11 10 9 8 7 6 5 4 3 2 1
-