目录
一、什么是shell
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程 序设计语言。shell是解释执行的。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面(是媒介)访问操作系统内核的服务
Shell脚本是一种用Shell语言编写的脚本文件,用于自动化执行一系列命令和操作。
Shell脚本通常包含一系列命令和控制结构,可以执行文件操作、系统管理、数据处理等任务。Shell脚本可以在命令行中执行,也可以作为一个可执行文件运行。
Shell脚本的文件扩展名通常是.sh,例如script.sh。编写Shell脚本可以提高工作效率,尤其是在需要重复执行一系列命令或操作时。常见的Shell脚本语言包括Bash(Bourne Again Shell)、Zsh(Z Shell)等。
通过编写Shell脚本,用户可以自动化执行各种任务,包括文件管理、系统配置、数据处理、定时任务等。Shell脚本也可以与其他编程语言结合使用,实现更复杂的功能。总的来说,Shell脚本是一种强大的工具,可以帮助用户更高效地管理和操作系统。
1.1、用处
1. 执行命令:用户可以通过shell执行各种命令,例如创建、复制、移动和删除文件,查看文件内容,管理进程等。
2. 脚本编程:用户可以使用shell编写脚本来自动化一系列操作,例如备份文件、定时任务等。
3. 管道和重定向:shell支持管道和重定向操作,可以将一个命令的输出传递给另一个命令,或将输出重定向到文件中。
4. 环境变量管理:shell可以管理系统和用户的环境变量,包括设置、查看和删除环境变量。
5. 用户和权限管理:shell可以用于管理用户和权限,包括创建、删除用户账号,修改文件权限等。
总的来说,shell是一个非常强大的工具,可以帮助用户更高效地管理和操作系统。
例如:
服务状态监控:
tomcat崩(当机),可以监控到,一旦停了就会自启动,如果有shell脚本就不需要开机自动了,系统已设置脚本就启动了,它就会不停的去探测是否在运行,没有运行会立刻会重启(适应情况:本来没有在现场:定时自动开)
shell的类型:
shell有两种主要的语法类型:
Bourne和C,这两种语法是互不兼容的。Bourne主要包括sh,ksh, Bash,psh,zsh,其中Bash在linux中使用最广;C家族主要包括:csh,tcsh。(默认用Bash)
# 查询系统中支持的shell
[lisen@localhost root]$ vi /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
二、 入门hello word
2.1 echo
echo在shell编程中经常使用,可以将信息输出到终端,也可以将字符重定向到文件等。
用处:echo命令通常用于打印输出到屏幕上,可以用来显示文本消息、变量值、文件内容等。它也可以用来将文本输出重定向到文件中。
2.2、echo命令格式:
echo [选项] [输出内容]
选项: -e 表示支持反斜杠控制的字符转换
[root@localhost ~]# echo -e "ab\bc" ac
输入内容:
符号 | 作用 |
\ 输 | 出\本身 |
\a | 输出警告声音 |
\b | 退格键,即向左删除键 |
\c | 取消输出行末的换行符,与-n作用一致 |
\e | esc键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | tab键(4隔) |
\v | 垂直制表符 |
\0nnn | 按照8进制ASCII码表输出字符 |
\xhh | 按照十六进制ASCII码表输出字符 |
[root@localhost ~]# echo -e '\a'
[root@localhost ~]#
控制颜色
echo -e "\e[1;31m abcd \e[0m"
错的信息用颜色标出来
解释:
\e[1 表示开启颜色输出
31m为定义颜色
\e[0m 表示结束颜色输出
颜色数值:
30m 黑色;31m 红色;32m绿色;33m黄色;34m蓝色; 35m洋红;36m青色; 37m白色
[root@localhost ~]# echo -e "\e[1;31m abcd \e[0m" abcd #字体为红色
2.3、 第一个脚本
[root@localhost ~]# mkdir sh
[root@localhost ~]# cd sh
[root@localhost sh]# vim hello.sh
[root@localhost sh]# cat hello.sh
#!/bin/bash
#hello.sh 是输出简单语句的测试版本
echo "hello world"
[root@localhost sh]#
创建一个专门放shell脚本的文件夹,切进去,编辑它,编辑完查看内容
赋权
在执行前需要为脚本赋予可执行权限,否则自己创建的脚本都不能用
[root@localhost sh]# ./hello.sh
-bash: ./hello.sh: 权限不够
[root@localhost sh]# ll
总用量 4
-rw-r--r--. 1 root root 79 2月 27 10:44 hello.sh
[root@localhost sh]# chmod 755 hello.sh
[root@localhost sh]# ll
总用量 4
-rwxr-xr-x. 1 root root 79 2月 27 10:44 hello.sh
[root@localhost sh]# ./hello.sh
hello world
[root@localhost sh]#
三、 Bash的基本功能
3.1、 别名
作用: 可以为我们常用的命令指定一个容易记的别名,方便使用。 在命令指定别名后,别名有优先执行权
如何指定别名: alias 别名=‘原命令’
如果查看别名:alias
[root@localhost sh]# alias vi='vim'
[root@localhost sh]#
取的别名只能在这个服务启动有效,重启就没效果了
关于命令的执行顺序:
- 如果使用绝对路径或相对路径执行命令,则执行是命令本身
- 如果没有指定相对或绝对命令,有别名优先执行别名
- 如果没有指定别名则,执行Bash的内部命令
- 优先级最后的是按照$PATH环境变量定义的目录查找顺序找到的第一个命令
注意: 原则上在定义别名时不要与原有的命令,这样容易混淆
3.2、别名的持久化:
以命令的方式定义的别名重启之后就不再有效了,如果需要持久化的保持别名在需要在 配置文件中指定。该文件在用户主目录下。
每个当前下的家目录,都会有.bashrc这个隐藏文件
[root@localhost sh]# cd ~
注要切到主目录,不然打开是个新文件
[root@localhost ~]# vi .bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
#在下面定义自己的别名,该别名永久生效
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
3.3、常见快捷键
3.4、输出输入
3.5、输出重定向
3.6、多命令执行
先判断再进入
[root@localhost ~]# ls /home/kkk && cd /home/kkk
ls: 无法访问/home/kkk: 没有那个文件或目录
[root@localhost ~]# ls /home/sha && cd /home/sha
[root@localhost sha]#
判断是否有,没有就创建
错误信息是第一个命令出的,但是并不影响第二个命令执行
[root@localhost sha]# ls /home/abc || mkdir /home/abc
ls: 无法访问/home/abc: 没有那个文件或目录
[root@localhost sha]# cd /home/
[root@localhost home]# ls
abc sha
[root@localhost home]#
3.7、管道符
命令格式:命令1 | 命令2 命令1的正确输出作为命令2的操作对象。注意:如果命令1不能正确输出则命令2不能执行。
1、more分屏
当结果比较多,可以分屏显示
ls /etc |more
2、grep 查找文本
查看当前的连接
先下载nett
yum install net-tools
netstat -an | grep ESTABLISHED
这个命令用于列出所有建立的网络连接,包括TCP和UDP连接。通过使用管道符号"|"和grep命令来筛选出只显示已建立的连接。这样可以帮助用户查看当前系统上已经建立的网络连接。
3.8、通配符和特殊符号
#设置变量
[root@localhost /]# name='zs'
[root@localhost /]# echo $name
zs
#失去变量名效果---单引号
[root@localhost /]# echo '$name'
$name
#输出变量名---双引号
[root@localhost /]# echo "$name"
zs
#把date变量赋值给d
#引号方式
[root@localhost /]# d=`date`
[root@localhost /]# echo $d
2024年 02月 27日 星期二 11:48:36 CST
#小括号方式
[root@localhost /]# dd=$(date)
[root@localhost /]# echo $dd
2024年 02月 27日 星期二 11:50:39 CST