美文网首页
shell基础在工作中的应用

shell基础在工作中的应用

作者: 下午茶_da6d | 来源:发表于2019-11-14 20:20 被阅读0次

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"

可以在关键步骤使用|| 抛出异常信息

相关文章

网友评论

      本文标题:shell基础在工作中的应用

      本文链接:https://www.haomeiwen.com/subject/ueqdictx.html