linux 定义键盘快捷键 远程桌面登陆 iic dart swift2 History.js 后台管理网页模板 bootstrap管理系统模板 郑州网站开发 click事件 jquery解析json java数据分析 matlab图像识别 html好看的字体 quartz配置 ubuntu显示隐藏文件夹 linux全局搜索文件 math保留两位小数 本地安装mysql js基本数据类型有哪些 kubernetes官网 python的random函数 python创建文件 java的数据类型 java的instanceof java数组删除 java中float java中的map java项目下载 磁盘分区软件 matlab2016a安装教程 动态加载js ad19 1660ti maxtoc4d js延迟加载 云管家 go2lan 微信砍价软件
当前位置: 首页 > 学习教程  > 编程语言

shell脚本_入门

2020/8/31 13:33:31 文章标签:

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~99使9代表第一个到第9个参数, 十以上的参数,需要使用大括号包含{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

本文链接: http://www.dtmao.cc/news_show_150096.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?