shell脚本_入门

shell入门

什么是Shell

  1. shell是一个命令行解释器, 他接受应用程序/用户命令,然后调用操作系统内核
  2. shell还是一个相当强大的脚本语言,易编写,易调试,灵活性强

系统拥有的shell

  • cat /etc/shells: 查看系统支持的shell

shell脚本

  1. 脚本格式
    • #!/bin/bash

shell变量

  1. 变量定义使用
    • 定义变量: i=0
    • 撤销变量: unset 变量
    • 声明静态变量: readonly 变量
      • 不能unset
      • 不能修改
    • 提升为环境变量: export
  2. 系统环境变量
    1. $HOME, $PWD, $SHELL, $USER
    2. 显示Shell中所有变量: set
  3. 特殊变量 $n
    • $n: (功能描述,n为数字,$0代表该脚本名称, $1~ 9 代 表 第 一 个 到 第 9 个 参 数 , 十 以 上 的 参 数 , 需 要 使 用 大 括 号 包 含 9代表第一个到第9个参数, 十以上的参数,需要使用大括号包含 99使{10})
  4. 特殊变量$#
    • 基本功能
      • $#: 获取所有输入参数个数,常用于循环
  5. 特殊变量$?
    • $?: 最后一次执行的命令的返回状态,如果这个变量的值是0,证明上一个命令执行成功,如果这个值是非零。则证明执行失败。

运算符

  1. 基本语法

    1. $((运算式))$[运算式]
    2. expr, +, -, \*, / %
  2. 演示

    • add
    a=5
    b=10
    echo $[$a+$b]
    echo $(($a+$b))
    expr $a + $b		# expr运算符之间要有空格
    

判断式

  1. 基本语法
    • [ condition ]: 注意,condition前后要有空格
    • 条件非空为true, [lcw]: true, []: 返回false
  2. 常用判断条件
    1. 两个整数之间比较
      1. =: 字符串比较
      2. -lt: 小于(less than)
      3. -le: 小于等于(less equal)
      4. -eq: 等于(equal)
      5. -gt: 大于(greater than)
      6. -ge: 大于等于(greater equal)
      7. ne: 不等于(not equal)
    2. 按照文件权限进行判断
      1. -r: 有读的权限(read)
      2. -w: 有写的权限(write)
      3. -x: 有执行的权限(execute)
    3. 按照文件类型进行判断
      1. -f: 文件存在并且是一个常规的文件(file)
      2. -e: 文件存在(existence)
      3. -d: 文件存在并且是一个目录(directory)

流程控制

  1. if判断

    1. 基本语法

      if [ 条件判断式 ];then
      	程序
      fi
      
      if [ 条件判断 ];
      	then
      		程序
      elif [ 条件判断 ]
      	then
      		程序
      else
      	程序
      fi
      
    2. 小练习

      #!/bin/bash
      # 查看是否存在一个叫做bbb的文件,如果不存在,我们就新建一个并输入b作为内容,存在就显示文件内容
      if [ -f bbb ];
      then
      	cat bbb
      else
      	echo "b" > bbb
      fi
      
  2. cast语句

    1. 基本语法

      case $变量名 in
      	"值1")
      		程序1
      	;;
      	"值2")
      		程序2
      	;;
      	*)
      		默认程序
      	;;
      esac
      	
      
  3. for循环

    1. 基本语法

      for ((初始值;循环控制条件;变量变化))
      	do
      		程序
          done
      
    2. 实例

      #!/bin/bash
      # 累加1到100
      s=0;
      for((i=1;i<=100;i++))
      do
      	s=$[$s+$i]
      done
      echo $s
      
    3. 语法2

      for 变量 in 值1 值2 值3
      	do
      		程序
      	done
      

read读取控制台输入

  1. 基本语法
    • read 选项 参数
  2. 基本参数
    1. -p: read -p "请输入" i
    2. -t 5: 5秒内输入东西

函数

  1. 自定义函数语法

    [function] funcname[()]
    {
    	Action;
    	[return int;]
    }
    function
    
  2. 技巧

    1. 必须在调用函数地方之前,先声明函数,shell脚本会逐行执行
    2. 函数返回值,只能通过$?系统变量获得
      1. 可以显示返回一个值
      2. 如果不显示返回,将以最后一条命令运行结果作为返回值
  3. 实例

    1. 实例一

      # function可以省略,()可以省,但是不能同时省略
      function aaa()
      {
      	echo abcd
      }
      aaa
      

远程文件拷贝命令

  1. scp(secure copy): 安全拷贝
    1. scp定义
      • scp可以实现服务器与服务器之间的数据拷贝(from server1 to server2)
    2. 基本语法
      • scp -r $pidr/$fname $user@hadoop$host:$pdir/$fname
      • 命令 递归 要拷贝的文件路径/名称 目录用户@主机:目的路径/名称
    3. 实践
      • scp -r hadoop101:/opt/module/hadoop-2.7.2 hadoop102:/opt/module
  2. rsync远程同步工具
    • rsync主要用于备份和镜像,具有速度快,避免复制相同内容和支持符号连接的优点
    • rsync和scp的区别
      • 用rsync做文件的复制要比scp速度快,rsync只对差异文件做更改,scp是把所有文件都复制过去
    • 基本语法
      • rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname
      • 命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
      • 选项参数
        • -a: 归档拷贝
        • -v: 显示复制过程

远程文件批量拷贝脚本

#!/bin/bash
# 1. 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi

# 2. 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$name

# 3. 获取上级目录的绝对路径
pdir=`cd -P $(dirname $p1); pwd`	# -P 如果时链接,进入真实目录 
echo pdir=$pdir

# 4. 获取当前用户名称
user=`whoami`

# 5. 循环
for((host=2; host<4; host++)); do
	echo ----------------------hadoop_$host------------------
	rsync -av $pdir/$fname $user@hadoop_00$host:$pdir
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值