![f4c45e67771662988e31049dcd1b118e.png](https://img-blog.csdnimg.cn/img_convert/f4c45e67771662988e31049dcd1b118e.png)
Shell Programming
代码请看过来
github欢迎点个 star
What is shell
用户与Linux 系统间接口的程序,允许用户向操作系统输入需要执行的命令
各种shell程序:
sh csh,tcsh,zsh ksh,pdksh bash
使用哲学
- 多个bash命令组合使用
- 如果需要优化则需要自己重新实现
管道和重定向
- 文件描述符0代表程序的标准输入,1代表程序的标准输出,2 代表标准错误输出
- > 是重定向的符号,如 ls -l > output.txt 将内容重定向到output.txt中, 如果output.txt 已存在,那么将文件覆盖
- >> 以追加的方式重定向。
- kill 1234 >killout.txt 2>killerr.txt 将标准错误输出重定向到killerr.txt中。
- kill 1234 > killout.txt 2>&1 将标准错误输出输出到与文件描述符1相同的输出地方(>& 是一个整体)
- 使用/dev/null 通用回收站来丢弃所有输出信息 kill 1234 >/dev/null 2>&1
- 使用管道操作符(|)来连接进程,命令执行的顺序时从左到右的,如: ps -xo comm|sort|uniq|grep -v sh|more 该命令用来查询所有进程,并按照字母顺序进行排序,去除名字相同的进程,去除名字为sh的进程,并且以分页的形式显示
- 同一行命令中,同一个文件不能被既写又读,这种情况下会返回空文件(在读取文件之前该文件被覆盖了)
作为程序设计语言的shell
#!/bin/bash
#first
#This file looks through all the files in the current
#directory for the string POSIX, and then prints the
#names of those files to the standard output
for file in *
do
if grep -q POSIX &file
then
echo $file
fi
done
exit 0
- # 单行注释
- ! 用来提示系统 紧跟其的使用来执行脚本的程序,如#!/bin/bash 告诉系统, /bin/bash 来执行当前程序
- 设置合理的退出码:以便于其他程序查看当前脚本是否成功执行,或者被其他程序调用—— 0代表成功(错误为0)
- file 文件名 可以用来查看文件类型
- 编写完成bash文件,chmod +x first.sh 将bash文件设为可执行
shell 语法
变量
- 直接使用,不需定义
- shell程序种所有的变量都被看成时字符串,如果要看成数值,需要手动转换
- 区分大小写
-
bash var=hello world ##var变量名可以用于赋值 echo $var ## 显示var内容需要$ var=7+5 echo $var ##显示 7+5 一切皆为字符串
- 等号(=)两边不能有空格, 字符串内不能有空格(如果有就用“” 括起来)。bash 用空白字符作为分隔符
-
bash read var ## 终端等待输入 ## 输入:hello world echo $var #终端显示 hello world
-
单引号与双引号作用不同
- 单引号仅仅用来扩住字符串,防止因为空格存在而被分割。
- 双引号具有单引号的功能,同时 ($变量)在双引号中会被扩展成变量内容
环境变量
|环境变量|意思| | —— |——| |$HOME|当前用户的家目录| |$PATH|冒号分割的默认搜索目录| |$PS1|命令提示符,一般是$| |$IFS|输入域分隔符,通常是空格、制表符、换行符| |$0|脚本的名字| |$1|第一个参数内容|