、
shell的脚本规范
echo -e用法
- echo -e “hello\c” 不换行
- echo -e “hello\n” 换行
- echo -e “\e[33mhello\e[0m” 按颜色显示
重定向
- 标准输入:默认以键盘来输入,文件编号为0
- 标准输出:默认设备是显示器,显示到桌面,文件编号为1,可写做 1>或1>>
- 标准错误输出:默认设备是显示器,文件编号为2 ,写做 2>或2>>
- 混合输出:既可输出正确的,也可输出错误的,可写做 &>或&>>
- > 为覆盖文件内容,>>为追加到文件里
- <为反向输入,可以不用交互模式就可以设置密码
[root@localhost ~]# vim pass
1234
1234
[root@localhost ~]# passwd zhangsan < pass
更改用户 zhangsan 的密码 。
新的 密码:无效的密码: 密码少于 8 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
变量
自定义变量
可自己指定变量名和变量值,格式在上一章中讲过
- a=10
[root@localhost ~]# a=10 //给变量赋值
[root@localhost ~]# echo $a //输出变量值
10
环境变量
-env 可以查看所有环境变量,想要将一个自定义变量加入永久变量
可以export a=10写入/etc/profile中
位置变量
#!/bin/bash
useradd $1 //定义第一个变量
echo "$2" |passwd --stdin $1 //定义第二个变量
[root@localhost ~]# bash pass lisi 123 //运行脚本 脚本后面第一个参数就是第一个位置,对应第一个变量,第二个参数对应第二个变量,此脚本用于创建用户并给一个密码
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
预定义变量
- $? 代表上一条执行命令的返回结果,0代表执行成功,非0代表执行不成功
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg original-ks.cfg pass 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost ~]# echo $?
0
[root@localhost ~]# ls sss
ls: 无法访问sss: 没有那个文件或目录
[root@localhost ~]# echo $?
2
- $# 代表位置参数个数
#!/bin/bash
useradd $1
echo "$2" |passwd --stdin $1
echo $#
[root@localhost ~]# bash pass lisi 123
useradd:用户“lisi”已存在
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
2
- $$ 代表当前进程的进程号
[root@localhost ~]# echo $$
21331
- $! 代表上一个后台进程的进程号
[root@localhost ~]# vim test &
[1] 21674
[root@localhost ~]# echo $!
21674
[1]+ 已停止 vim test
- $* 表示所有位置参数的内容,当成一个整体
#!/bin/bash
echo $1
echo $2
echo $*
touch "$*"
[root@localhost ~]# ll
总用量 16
-rw-------. 1 root root 1699 5月 31 23:51 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 6月 2 19:42 c d
- $@ 表示所有位置参数的内容,以单个形式列出
#!/bin/bash
echo $1
echo $2
echo $@
touch "$@"
[root@localhost ~]# ll
总用量 16
-rw-r--r--. 1 root root 0 6月 2 19:44 a
-rw-------. 1 root root 1699 5月 31 23:51 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 6月 2 19:44 b