shell脚本
#:对语句进行注释
#!/bin/bash意思是指此脚本使用/bin/bash来解释执行
脚本执行方式:
1、更改属性:chmod 744 给所有者执行权限
2、sh+脚本名字 sh ./脚本文件
Shell脚本字符串单引号、双引号、反引号的作用和区别:
单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)
双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符
反引号:
命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。shell中有两种方法作命令替换:把shell命令用反引号或者
(
.
.
.
)
结
构
括
起
来
,
其
中
,
(...) 结构括起来,其中,
(...)结构括起来,其中,(…)格式受到POSIX标准支持,也利于嵌套
linux shell变量分为:环境变量、系统变量和用户自定义变量
系统变量:$HOME $PWD等等,查看系统变量命令:env
env 和 set 命令的区别是,set 命令可以查看所有变量,而 env 命令只能查看环境变量
shell变量定义:
1、变量名称可以由字母、数字和下划线组成,但不能以字母开头
2、等号两侧不能有空格
3、变量名称一般习惯大写
位置参数变量:执行一个shell脚本时,如果希望获取到命令的参数信息。就可以是使用位置参数变量
$ n:(n为数字,$ 0代表命令脚本本身,$ 1~$ 9代表第一到第九个参数,十以上的参数需要用到大括号如:$ {10})
$*:把所有的参数看成一个整体
$@:也代表命令中所有的参数,不过他是把每个参数区分对待对待
$#:代表命令行中所有参数的个数。
预定义变量:
$$:当前进程号
$!:后台运行最后一个进程号
$?:最后一次执行的命令的返回状态,如果是0,证明上一个命令正确执行,非0,上一个命令没有正确执行。
判断要求:
1、两个整数的比较:
= 字符串的比较
-lt 小于、-le小于等于、-eq等于、-gt大于、-ge大于等于、-ne不等于
2、按照文件权限进行判断:
-r有读的权限、-w有写的权限、-x有执行权限
3、按照文件类型进行判断:
-f文件存在并且是一个常规的文件、-e文件存在
-d文件存在并且是一个目录
流程控制:
自定义函数:
function 函数名(){}
#调用函数
读取控制输入:
read 命令从标准输入中读取一行,-p 提示语句,-n 字符个数,-s 屏蔽回显,-t 等待时间,-d 输入分界。
Shell 的环境变量分为 set, env 两种,IFS 是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space,(空格) tab, newline(换行) 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。
Shell的内部域分隔符可以是空格、制表符和换行符。它可以作为命令的分隔符用在例如read、set和for等命令中。如果在列表中使用不同的分隔符,用户可以自己定义这个符号。在修改之前将IFS原始符号的值保存在另外一个变量中,这样在需要的时候还可以还原。
文件描述符介绍
linux shell下常用输入输出操作符是:
标准输入 (stdin) :代码为 0 ,使用 0< 或 0<< ; /dev/stdin -> /proc/self/fd/0 0代表:/dev/stdin
标准输出 (stdout):代码为 1 ,使用 1> 或1 >> ; /dev/stdout -> /proc/self/fd/1 1代表:/dev/stdout 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr
文件描述符0理解为我和计算机交互时的输入,而这个输入默认是指向键盘
文件描述符1理解为我和计算机交互时的输出,而这个输出默认是指向显示器
文件描述符2理解为我和计算机交互时,计算机出现错误时的输出,也是指向显示器
额外小知识:
P1命令提示符:
\W 当前工作目录,\h 主机名,\u 用户名,\d 日期,\t 时间,\a 响铃提示
PS2命令提示符:
用户在命令后输入空格+\符号时,表示命令没有输入结束并换新行继续输入
/dev/null文件
这是一个很特殊的文件,你写入的任何东西都会清空
1)我们可以把标准错误输出重定向到/dev/null,从而丢掉不想保存的错误信息
2)我们可以快速移除现有文件的数据而不用先删除文件在创建
exec:表示永久重定向(shell的内置命令)
我们看到将标准输出重定向到 c.txt文件后,再ls -l 已经不会输出到控制台了
将会永久输入到c.txt。
&>"文件描述符
“&>”,表示生成的所有输出都会发送到同一个位置
实例: