Shell编程
创建shell 脚本
Shell脚本以 .sh为后缀
用vim 创建一个.sh 文件
# vim run.sh
编写脚本
第一行要指定系统使用哪种Shell
#!/bin/sh
#第一行执行 使用哪种 shell
执行脚本
使用sh命令
sh ./if.sh
直接执行
直接执行 shell脚本,需要sh文件有可执行权限
[root@localhost sh]# ./if.sh
bash: ./if.sh: 权限不够
增加可执行权限
chmod +x if.sh
# 或者
chmod +1 if.sh
[root@localhost sh]# ./if.sh
bash: ./if.sh: 权限不够
[root@localhost sh]# chmod +x if.sh
[root@localhost sh]# ./if.sh
ss
输入重定向
0 标准输入 stdin
1 标准输出 stdou
2 标准错误输出 stderr
使用小于号 < 实现输入重定向
[root@localhost sh]# cat < /etc/fstab
# /etc/fstab
# Created by anaconda on Tue Apr 13 08:37:07 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/sdb1 /mnt ext3 defaults 0 1
输出重定向
输出重定向有两种
> 直接输出
>> 追加输出
直接输出 >
ls > la.txt
会覆盖文件之前的内容
[root@localhost sh]# ls > sh.txt
[root@localhost sh]# cat < sh.txt
case_isYN.sh
case.sh
dir
double_if.sh
追加输出 >>
ls >> la.txt
[root@localhost sh]# ls > sh.txt
[root@localhost sh]# ls >> sh.txt
[root@localhost sh]# cat < sh.txt
case_isYN.sh
case.sh
dir
case_isYN.sh
case.sh
dir
/dev/null
/dev/null属于字符特殊文件,它属于空设备,是一个特殊的设备文件,它会丢弃一切写入其中的数据,写入它的内容都会永远丢失,而且没有任何可以读取的内容。
管道
将 | 前的命令的输出作为 | 后面命令的输入
[root@localhost sh]# ps -ef|grep java
root 6807 3423 0 11:47 pts/0 00:00:00 grep --color=auto java
特殊字符
$ 表示变量替换
\ 转义字符 ,让shell当做普通字符处理
-
双引号(“)
除 $ ` \ 保留特殊功能,其他字符作为普通字符
-
单引号(‘)
全部作为普通字符
-
倒引号(`)
倒引号中的内容被解释为 命令行,执行时会先执行该命令行,以其输出结果替换倒引号内容
注解
# 表示注解
#!/bin/sh
# 第一行的不是注解
# 我是注解
ps -ef
变量
变量名=值
变量名=
msg="hello shell"
age=
使用变量
使用$变量名使用
msg="hello shell"
echo $msg
系统变量
$0 当前程序的名称
$n (n取1、2,...n) 当前程序方法的第 n 个参数,n=1,2,3,...9
$* 当前程序的所有参数 ( 不包括程序本身 )
$# 当前程序的参数个数 ( 不包括程序本身 )
$? 命令或程序执行完后的状态,一般返回 0 表示执行成功。
$UID 当前用户的 ID
$PWD 当前所在的目录