Linux的Shell编程
hadoop搭建时方便用的脚本
xcall.sh
vi /usr/local/bin/xcall.sh
输入以下内容
#!/bin/bash
#注意node0$i 是为了拼接处主机名,这里按照实际情况更改它,及for循环
#该脚本可以同时执多个linux中的命令,比如jps、ls -al、rm -rf *(慎用)等
params=$@
i=1
for (( i=1 ; i <= 4 ; i = $i + 1)) ; do
echo ==============node0$i $params =========
ssh node0$i "$params"
done
You have mail in /var/spool/mail/root
xsync.sh
#!/bin/bash
#该脚本是为了遍历多台linux中执行rsync -lr命令
#该命令是用来夸linux复制文件
if [[ $# -lt 1 ]] ; then echo no params ; exit ; fi
p=$1
dir=`dirname $p`
filename=`basename $p`
cd $dir
fullpath=`pwd -P .`
user=`whoami`
for (( i = 1 ; i <= 4 ; i = $i + 1 )) ; do
echo ========== node0$i ============
rsync -lr $p ${user}@node0$i:$fullpath
done ;
shell脚本基础
Shell 编程一般指 shell 脚本编程。
语法:
使用 vi 编辑器新建一个文件 hello.sh
#!/bin/bash
echo "Hello World !"
执行:
方式1:
sh hello.sh
方式2
chmod +x ./hello.sh #使脚本具有执行权限,给所以用户加执行权
./hello.sh #执行脚本
1.变量
-
变量前后无空格,其他前后都有空格
局部变量
#!/bin/bash
str="hello"
echo ${str}world
环境变量
echo $PATH
echo $HOME
2.特殊字符
符号 | 含义 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 |
$$ | 脚本运行的当前进程 ID 号 |
$! | 后台运行的最后一个进程的 ID 号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。不是一体返回 |
$? | 显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。如果函数有返回值,可以代表函数返回值 |
#!/bin/bash
echo "第一个参数为: $1";
echo "参数个数为: $#";
echo "传递的参数作为一个字符串显示: $*";
执行:
./test.sh 1 2 3
3.运算符
#!/bin/bash
a=1;
b=2;
echo `expr $a + $b`;
echo $((a+b));
echo $[a+b];
4.if语句
#!/bin/bash
read -p "please input your name:" NAME ## read命令用于从控制台读取输入数据
## printf '%s\n' $NAME
if [ $NAME = root ]
then
echo "hello ${NAME}, welcome !"
elif [ $NAME = itcast ]
then
echo "hello ${NAME}, welcome !"
else
echo "Get out Please!"
fi
5.for语句
方式1:
#!/bin/bash
for N in 1 2 3
do
echo $N
done
方式2:
#!/bin/bash
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done