Linux shell脚本的编写案例
vim ~/.bashrc #写入环境变量配置文件
然后执行source .bashrc这个文件就生效了
unalias是删除别名 unalias vi 但是这个是临时删除,想要永久删除的话必须在配置文件.bashrc里面删除才行
然后取出这10条数据中:前面的
下面举个例子:判断登录用户是否为root
先env,然后把里面的User=" XX"提取出来,如果XX=root则是root用户登录
第二个例子:判断根分区的使用情况
[email protected]:表示所有脚本的参数内容
$#:表示所有参数的个数 如图所示
$?:是上次命令的执行结果
$0:文件名称
$123:指的是第几个参数
shift:向左移动
这里注意:要让所有目录下都可以执行这个.sh文件,应该配置环境变量,或者把它放到环境变量指定的目录,我这里把它放到了环境变量指定的目录中mv xxx.sh /usr/local/bin 如果放到了这个目录下xx.sh就可以直接执行 而不用在./xx.sh了
判断输入的是否为一个目录
另外给出一个截图,shell命令 输出的结果会一一对应,可以认真看一下
下面给出一个shell脚本,我们经常要用的是一个同步,一个调用这些功能等
#!/bin/bash
[email protected]
i=201
for (( i=201 ; i <= 204 ; i = $i + 1 )) ; do
echo ============= s$i $params =============
ssh s$i "$params"
done
这里$params必须要加双引号,为了能够跟管道符不产生歧义,我就是没有加双引号,所以一下截图的命令就没有执行成功
可以实现的功能:把tmp目录下的文件全部删除
但是执行jps就不行了
这个原因找到了,(补充)使用xcall.sh在所有节点上创建jps符号连接,指向/soft/jdk/bin/jps
------------------------------------------------------------------
1.切换到root用户
$>su root
2.创建符号连接
$>xcall.sh "ln -sfT /soft/jdk/bin/jps /usr/local/bin/jps"
3.修改jps符号连接的owner
$>xcall.sh "chown -h centos:centos /usr/local/bin/jps"
4.查看所有主机上的java进程
$>xcall.sh jps
这个时候就能用xcall.sh jps这个j命令了
rsync -lr $p ${user}@s$si:$fullpath 这么多代码的结果就是箭头指向的代码,这里只给出了一句,应该是多句话, 达到向多台机器上自动 同步文件的目的, 有的人说问啥不用scp呢 不也可以同步文件嘛,原因就是scp不支持符号链接,它会把符号链接转换成文件,那不是我们想要的,而rsync则支持符号链接一起同步
#!/bin/bash
if [[ $# -lt 1 ]] ; then echo no params ; exit ; fi
p=$1
#echo p=$p
dir=`dirname $p`
#echo dir=$dir
filename=`basename $p`
#echo filename=$filename
cd $dir
fullpath=`pwd -P .`
#echo fullpath=$fullpath
user=`whoami`
for (( i = 202 ; i <= 204 ; i = $i + 1 )) ; do
echo ======= s$i =======
rsync -lr $p ${user}@s$i:$fullpath
done ;
这里再还有两点没有说出来:rsync -lr r是递归,l是链接
cd $dir 执行这句话是进入到/root/App这个目录下了
'pwd -P'是物理路径 ‘pwd -P .’加一个.就是指当前的物理路径,所以结果会输出存放a.txt文件的物理路径即/root/App
有兴趣的朋友可以自己看着代码敲下然后执行下你就能很快的明白了。