Shell编程-基础(一)

413 阅读2分钟

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当做普通字符处理

  1. 双引号(“)

    除 $ ` \ 保留特殊功能,其他字符作为普通字符

  2. 单引号(‘)

    全部作为普通字符

  3. 倒引号(`)

    倒引号中的内容被解释为 命令行,执行时会先执行该命令行,以其输出结果替换倒引号内容

注解

# 表示注解

#!/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 当前所在的目录