shell脚本1
1.脚本基础
shell程序是linux/unix操作系统与用户交互的接口
1.1 内建命令
内建命令:shell程序本身可以接收并处理的指令
外部命令:从path路径中搜索,创建一个当前shell的子进程,子进程执行
type -a 指令
[root@iZjrkzhzhrquk8Z ~]# type -a pwd
pwd 是 shell 内建
pwd 是 /usr/bin/pwd
pwd既有内建版本,也有外部命令版本
1.2 退出登录
logout
exit
ctrl+D
1.3 自定义shell
-
历史命令记录:
history 1000 export LANG="en_US";export LANGUAGE="en_US";export LC_ALL="en_US";top 1001 ls 1002 clear 1003 type -a pwd 1004 history
-
自定义shell:
[root@iZjrkzhzhrquk8Z ~]# alias hh=‘ls -l‘ [root@iZjrkzhzhrquk8Z ~]# hh 总用量 4 drwxr-xr-x 4 root root 154 5月 6 21:59 gocqhttp drwxr-xr-x 8 root root 207 5月 6 22:08 rebot drwxr-xr-x 2 root root 4096 5月 6 15:48 rpm
-
永久生效,将shell写入用户目录下的初始化文件.bashrc,此文件每次登录会自动执行,修改后重新登录即可生效
1.4 修改命令行提示符
命令行提示符通过内建变量PS1和PS2定义的,通过修改二者即可改变其显示
[root@iZjrkzhzhrquk8Z ~]# export PS1=‘<love>[\w]‘
<love>[~]ls
gocqhttp rebot rpm
<love>[~]cd rebot/
<love>[~/rebot]ls
PS2一般使用于命令行里较长命令的换行提示信息
PS1特殊字符
参数 | 作用 |
---|---|
\H | 主机名 |
@ | 12小时制时间 |
\A | 24小时制时间 |
\! | 命令历史列表编号 |
\W | 当前工作目录名 |
\$ | 如是root则为#否为 $ |
1.5 PATH环境变量
可以不加路径直接执行命令,path定义了执行外部命令时bash的搜索路径,有先后次序。
[17:49]~#echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[17:57]~#export PATH=~/bin:${PATH}
[17:58]~#echo $PATH
/root/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[18:04]~#ls bin/
hello.py hello.sh
[18:04]~#hello.sh
hello world
如上图,添加root目录下bin到环境变量,可以直接执行其下的脚本(需要chmod+x)
1.6 获取帮助
- 使用内建命令help来获取bash的帮助信息
help help
,只能用于内建命令 - man获得外部命令的man手册页
- info显示帮助信息
[18:16]~#help for
for: for 名称 [in 词语 ... ] ; do 命令; done
为列表中的每个成员执行命令。
`for‘ 循环为列表中的每个成员执行一系列的命令。如果没有
`in WORDS ...;‘则假定使用 `in "$@"‘。对于 WORDS 中的每
个元素,NAME 被设定为该元素,并且执行 COMMANDS 命令。
退出状态:
返回最后执行的命令的状态。
1.7 shell 脚本
vim hello
#!/bin/bash
# 注释,以上指定了shell程序/bin/bash来执行程序
cal #显示日历
date #显示当前时间和日期
echo ‘Hello World!‘
[18:30]~#hello
五月 2021
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
2021年 05月 10日 星期一 18:30:17 CST
Hello World!
执行脚本的方法,filename为绝对路径
- source + filename
- chmod +x file,然后./file
- bash,sh + filename
- source+<+filename
1.8 注释
# 单行注释
:<<!
#注释内容块
!
参考书目:
[1] 张泽.Linux Shell编程艺术[M]. 北京:电子工业出版社,2014.1