01 . Shell详细入门介绍及简单应用
Shell简介
Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 解释处理Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出显示到屏幕给用户.
Shell分为两类
图形界面 Shell(GUI Shell)
GUI为 Unix 或者类 Unix 操作系统构造一个功能完善、操作简单以及界面友好的桌面环境。主流桌面环境有 KDE,Gnome 等。
命令行界面 Shell(CLI Shell)
CLI是在用户提示符下键入可执行指令的界面,用户通过键盘输入指令,完成一系列操作。
在 Linux 系统上主流的 CLI 实现是 Bash,是许多 Linux 发行版默认的 Shell。还有许多 Unix 上Shell,例如 tcsh、csh、ash、bsh、ksh 等。
如何查看系统支持的shell
一个系统中可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的,但是最常用的shell还是/bin/bash
cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
Shell命令基本格式
shell命令可以分为两大类
-
一类是内置命令,即系统自带的命令,如ls,这是显示文件夹下文件的命令;
-
另一类是外置命令,如vi,是调用vi编辑器的命令,而vi编辑器是一个软件,这类命令由独立的程序实现的命令,用于对linux的扩展,是外置命令
shell命令格式如下
命令名 [选项] <参数1> <参数2>…
# 方括号内为可选的,命令可能有0个或者多个参数。
shell命令小知识
1.shell自动补齐和历史记录
shell会在用户输入命令前几个字母后按 键自动补齐,如果有多个候选命令会显示出全部命令。
shell会自动记录用户使用的命令,用户可以按 上 下 键 来查看。
2.shell提示符
shell提示符有两种,一种是 $结尾,为普通用户权限下的提示符号,一种是#结尾,为管理员权限,用户可以用su命令切换用户,如下图:
3.输入输出重定向
shell命令是控制台命令,使用标准输入和输出设备,即从键盘接受输入,将结果显示在显示器上。重定向可以将shell的输入输出重定向到文件或设备。
输入重定向符号为”<”,输出重定向符号为”>”和”>>”。如果shell命令 “X”在执行过程中,需要从控制台获得数据,那么执行”X < file”可以从file文件中获得所需数据。如果X在执行过程中产生数据,可以用 “X > file”和”X >> file”将结果输入到文件。”>”为覆盖输入,”>>”为追加输入
4.管道
linux系统中,管道是一种先进先出的单数据通道,利用管道符号”|”可以将多个命令组合到一起,把一个命令的输出传递给下一个命令作为输入,最终得到经过多个命令一次处理的结果。如,用ll和grep结合来查找当前目录是否有这个文件:
什么是Shell脚本
脚本就是shell命令组成的文件,这些命令都是可执行程序的名字,脚本不用编译即可通过解释器解释运行。
它是一种解释型语言,我们可以用shell脚本操存执行动作,用脚本判定命令的执行条件,用脚本来实现动作的批量执行
Shell简单使用
脚本开头
为了便于脚本的使用者可以快捷的了解到脚本的用途与其使用的解释器,通常我们需要在脚本的开头加上注释。
#!/bin/bash 脚本使用的解释器,通常用幻数“#!”指定
# Autho: 脚本作者
# Create_date 脚本创作时间
# Mail: 脚本作者联系方式
# Description: 脚本作用解释
# Version: 脚本的版本
脚本内容
在shell脚本中可以出现任何系统命令,输入你想要执行的命令即可,我们创建一个hello.sh
cat hello.sh
#!/bin/bash 脚本使用的解释器,通常用幻数“#!”指定
# Autho: 脚本作者
# Create_date 脚本创作时间
# Mail: 脚本作者联系方式
# Description: 脚本作用解释
# Version: 脚本的版本
echo hello
shell脚本的执行方法
首先我们给脚本执行权限
chmod +x 脚本路径/脚本名
执行方式1: 输入脚本的绝对路径或者相对路径
# 注意: 如果不给+x权限是不能这种方式执行脚本的
# 绝对路径
/root/test.sh
hello
# 相对路径
./test.sh
hello
执行方式2: sh +脚本
sh /root/test.sh
hello
执行方式3: source + 脚本
source /root/test.sh
hello
执行方式4: . + 脚本
. test.sh
hello
区别
# 第一种和第二种会新打开一个bash,不同bash中的变量无法共享,
# 第三种和第四种是直接使用当前运行环境作为解释器运行环境
sudo 执行脚本带不出环境变量
# 有时候sudo ./test.sh执行脚本找不到一些java环境变量,可以通过
sudo -E ./test.sh