shell 简介
Shell 是一个用 C 语言编写的程序,一般我们说的shell编程,是指编写shell脚本。
Shell 负责完成用户与内核之间的交互(shell是一个命令解释器,负责将用户的命令解析成操作系
统所能理解的指令)

第一个shell脚本
创建一个shell脚本–test.sh
#! /bin/sh
echo "hello world"
echo "hello world"很简单就是输出字符串hello world
#! /bin/bash -->告诉操作系统用哪种类型的shell来解释执行该程序
如何执行改脚本,创建test.sh是个普通文件,使用ls -l可以查看,该文件没有可执行权限,使用
chmod u+x test.sh,给脚本添加上可执行权限。
ghost-linux@ghost-linux:~/shell$ ./test.sh
hello world
输入和输出
echo
echo string
echo 是shell中用于输出的指令
如果需要转义,可以加上-e选项;用-n选项来禁止echo命令输出后换行

read
read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量
read varible1 varible2 ...


管道
cmd1 | cmd2
管道就是将一个命令cmd1的输出当做输入传给另一个命令cmd2。
|是管道符号
一般情况下,管道后面的操作都是查找grep、切割awk或替换seb

重定向
-
系统已经定义的文件描述符
- 标准输入:0
- 标准输出:1
- 标准错误:2
-
重定向命令
命令 作用 cmd > file 将cmd重定向到file cmd >> file 将cmd重定向追加到file m <& n 将文件描述符n输入重定向到m m >& n 将文件描述符m输出重定向到n cmd < file 将file作为输入给cmd cmd << deli 从标准输入中读入,直至遇到deli分界符 cmd > file 2>&1 把标准输出和标准错误一起重定向到file中


exec
exec执行shell命令

-
操作文件描述符
使用
exec创建的文件描述符重定向,是永久有效,直到显示取消重定向,可以看下面例子#! /bin/bash echo "input 6<&0 name ouput to stdout" exec 6<&0 0<name read var read var1 echo $var echo $var1 echo "close fd--6" exec 0<&6 6<&- echo -n "read from stdin:" read num echo "num = $num" echo "test over" >> name echo this is file name: cat name echo "redirect stdout to exec.log" exec 1>exec.log wc -l name echo "redirect stdout to stderr" exec 1>&2 echo "redirect stdout to stderr over" wc -l name echo "ouput exec.log" cat exec.log

变量
在shell中用户可以建立变量来存储数据,但不支持数据类型,变量名命名规则:数字、字母、下划线,不能以数字开头。
环境变量
当前shell的环境设置的一些变量
export—设置新的环境变量
env—显示所有环境变量
set—显示所有本地的shell变量
unset—清除环境变量**(高危)**
常见的环境变量:
PWD=/home/ghost-linux/shell — 当前路径(绝对路径)
HOME=/home/ghost-linux — 家目录
USERNAME=ghost-linux —用户名
创建一个新的环境变量:

- 在文件中添加
- 在
/etc/profile文件中,使用export创建环境变量 - 执行
source /etc/profile使环境变量生效
- 在
用户自定义变量
1、在shell编程中通常使用全大写变量,方便识别
2、变量的使用:在变量前加$
3、Linux Shell/bash从右向左赋值
4、使用unset命令删除变量的赋值 unset 变量名
COUNT=1
注意:
1、无数据类型,默认为字符串
2、“=”两边没有空格
位置变量 即 命令行参数
-
$0:与键入的命令行一样,包含脚本文件名 -
$1,...$9:分别包含第一个到第九个命令行参数 -
$#:包含命令行参数的个数 -
$@ / $*:包含所有命令行参数 ——>“$1....$9”,区别在于$*返回的是一个字符串整体,$@是以空格分开的字符串集 -
$?:包含前一个命令的退出状态 -
$$:包含正在执行进程的ID号
#! /bin/bash
echo this is '$0' = $0
echo '$1' = $1
echo '$2' = $2
echo '$#' = $#
echo '$@' = $@
echo '$*' = $*
echo '$$' = $$
echo '$?' = $?

预定义变量
预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成
$?:打印前一个命令的退出状态$$:打印正在执行进程的ID号$!:后台运行的最后一个进程的进程号(PID)

![[附源码]计算机毕业设计学习帮扶网站设计与实现Springboot程序](https://img-blog.csdnimg.cn/6659184590f6482a83fb0c58a04a9e83.png)









![BUUCTF Misc 黑客帝国 [MRCTF2020]你能看懂音符吗 [HBNIS2018]caesar [HBNIS2018]低个头](https://img-blog.csdnimg.cn/2aa82c1cd30d436ca76f738a08119ab4.png)
![[附源码]计算机毕业设计校园疫情防范管理系统Springboot程序](https://img-blog.csdnimg.cn/2362527bfa184581b37aec7b9c74e82b.png)






