shell编程基础:
1. shell变量:环境变量、特殊变量、用户自定义变量
2. shell输入输出
3 shell脚本书写格式
4 shell脚本执行
5 shell命令执行顺序
1. shell变量
1.1环境变量:
定义在系统的/etc/bashrc /etc/bash_profile文件中,大写
环境变量配置文件:
/etc/bash-所有用户
/etc/profile
~/.bash_profile当前用户
~/.bashrc
set查看当前用户所有环境变量;
常用环境变量:USER、HOME、PWD、PATH
应用示例:
[avatar@xxx ~]$ echo $USER
avatar
[avatar@xxx ~]$ echo $HOME
/home/avatar
[avatar@xxx ~]$ echo $PWD
/home/avatar
You have new mail in /var/spool/mail/avatar
[avatar@xxx ~]$ echo $PATH
/Data/apps/jdk/bin:/Data/apps/nodejs/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/Data/apps/git/libexec/git-core:/Data/apps/php/bin:/home/avatar/bin
1.2特殊变量:
$n
:脚本输入的第n个参数值
$#
:参数个数
$0:
脚本名称
$?
:检查上一个命令的正确性(0正确,非0错误)
$*
:所有参数内容
代码示例:
1 #!/bin/bash
2 echo "脚本名称为:" $0
3 echo "脚本参数为:$*"
4 echo "参数个数共有:"$#
5 echo "脚本输入的第1个参数值:$1"
执行结果如下:
[avatar@xxx ~]$ sh test.sh 1 2 3 4 5 6
脚本名称为: test.sh
脚本参数为:1 2 3 4 5 6
参数个数共有:6
脚本输入的第1个参数值:1
1.3用户自定义变量:
自定义变量: DAY=sunday
查看自定义变量:echo $DAY
定义全局变量:export DAY=sunday(当前shell及其子shell中均生效)
自定义变量的清除:unset DAY
2. shell输入输出
2.1 echo
用法:echo [-e][-n] str
str:要输出的字符串,可以包括shell变量名,转义符等,一般用""引起来
-e:解析字符串中的转义字符 如\n换行 \t空格等
[avatar@xxx~]$ echo -e 'a\nb'
a
b
-n:加上-n输出后不换行
[avatar@xxx ~]$ echo -n aaa && echo bbb
aaabbb
2.2 read:
键盘或者文件的某一行文本中读入信息,并将其赋给一个变量
一般格式:read [-p][-s] val1 val2 ...
-p参打印提示字符串
[avatar@xxx ~]$ read -p "请输入服务器域名:" DomainName
请输入服务器域名:jss.xxx.xxx.xxx
[avatar@xxx ~]$ echo $DomainName
jss.xxx.xxx.xxx
read -p "请输入服务器域名:" DomainName
echo $DomainName
-s用户输入时隐藏
[avatar@xxx ~]$ read -p "请输入密码:" -s password
请输入密码:
[avatar@xxx ~]$ echo $password
123456
2.3 cat:
显示文件内容、创建文件,还可以用它显示控制字符
注意:一次显示完整个文件。可以使用more命令或者把cat命令的输出通过管道传递到另一个具有分页功能的命令中个,使用less file可以实现相同功能。
一般格式:cat [opt] file1 file2... [> filename] 复制一个大文件myfile
cat myfile | more(空格翻页)
-n 显示行号cat -n myfile
-b 空行不编号cat -b myfile
清空内容:cat /dev/null > null.txt
复制文件:cat pay/modifypassword.sh > jss.sh
2.4 tee:
读取标准输入的数据,并将其内容输出屏幕,同时保存成文件。
一般格式:tee [-ai][--help][--version][文件]
参数:-a 追加内容
-i 忽略中断信号
--help 在线帮助
--version 显示版本信息
eg:列出文件test.txt内容,同时复制三份文件名称分别问test01.txt test02.txt test03.txt
[avatar@xxx ~]$ cat test.txt |tee test01.txt test02.txt test03.txt
test
[avatar@xxx ~]$ ll test*.txt
-rw-rw-r-- 1 avatar avatar 5 11月 14 19:38 test01.txt
-rw-rw-r-- 1 avatar avatar 5 11月 14 19:38 test02.txt
-rw-rw-r-- 1 avatar avatar 5 11月 14 19:38 test03.txt
-rw-rw-r-- 1 avatar avatar 5 11月 14 19:38 test.txt
2.5 管道:
管道:把前一个命令的输出作为下一个命令的输入
cmd1 | cmd2 | cmd3
最常用的ps aux |grep mysql |grep -v grep
#查看进程号
ps -ef | grep 'xxx' | grep -v 'grep xxx' |awk '{print $2}'
3. shell脚本格式示例:
脚本中应包括的内容:
--脚本运行环境设置:#!/bin/bash
--注释行以#开始:#This is a content
--脚本语句:echo "hello world!";
--设置脚本文件为可执行
--在shell中,分号“;”表示一个命令的结束
shell编程示例:检查当前目录下是否有常用脚本软链接,没有则创建
[avatar@xxx pay]$ vi checkln.sh
1 #!/bin/bash
2 #检查当前目录下是否有清缓存脚本软链接,没有则创建
3 file="./cleancache.php"
4 if [ ! -f $file ];then
5 ln -s /home/avatar/system/libs/framework/baseclient/cleancache.php cleancache.php
6 echo "cleancache 软链接创建成功!"
7 else
8 echo "当前目录下已存在cleancache软链接"
9 fi
[avatar@xxx pay]$ sh checkln.sh
cleancache 软链接创建成功!
[avatar@xxx pay]$ sh checkln.sh
当前目录下已存在cleancache软链接
之前还用shell脚本完成一些自动部署操作,想让他做啥都行,哈哈哈
图片.png
1.4运行shell脚本:
sh checkln.sh
.checkln.sh
./checkln.sh
前两种脚本执行不需要有可执行权限,第三种脚本执行方法需要有可执行权限。
5关于命令执行顺序:
5.1 cmd1 && cmd2 :即当cmd1执行成功以后才会执行cmd2
比如环境不好使我们可能要对各种服务执行万能的重启操作,可以放在shell中用&&连接确保每个重启操作都正常执行成功。
5.2 cmd1 || cmd2:当命令一执行失败的时候才会执行命令2
cp a.txt newa.txt || echo "if you see this words ,your cp command was failed"
可以在关键步骤使用|| 抛出异常信息
网友评论