qwe3223678qwe 发表于 2018-8-28 09:01:09

shell字符串处理-数组-expect

  把当前系统前10个系统用户名 和 uid号输出到屏幕上
  head/etc/passwd
  字符串截取
  1${变量名:起始位置:长度}
  echo   ${变量名:起始位置:长度}
  变量名=${变量名:起始位置:长度}
  806echo $HOSTNAME
  808${HOSTNAME:0:3}
  809echo ${HOSTNAME:0:3}
  810echo $HOSTNAME
  811echo ${HOSTNAME:0:5}
  812domain=${HOSTNAME:0:5}
  813echo $domain
  814domain=${HOSTNAME:6}
  2使用 expr substr
  # echo $HOSTNAME
  pc205.tarena.com
  #
  # expr substr "$HOSTNAME" 1 5
  pc205
  # expr length "$HOSTNAME"
  16
  # expr length "panglijing"
  10
  #
  3使用cut工具
  echo $var | cut -b 起始位置-结束位置
  echo$HOSTNAME|cut-b   1-5
  echo$HOSTNAME|cut-b   6-
  head-3/etc/passwd|cut    -d":"-f1,3
  4 路径分割
  basename
  dirname
  # basename /etc/sysconfig/network-scripts/ifcfg-eth0
  ifcfg-eth0
  #
  #
  # basename /etc/passwd
  passwd
  # basename /etc/sysconfig/network-scripts
  network-scripts
  # basename /etc/sysconfig/network-scripts
  network-scripts
  #
  # dirname /etc/sysconfig/network-scripts/ifcfg-eth0
  /etc/sysconfig/network-scripts
  #
  # dirname /etc/sysconfig/network-scripts
  /etc/sysconfig
  #
  +++++++++++++++++++++++++++++++++++++++++++++++++
  字符串替换
  ${var/old/new}
  ${var//old/new}
  name=panglijing
  # echo ${name/i/F}
  panglFjing
  # echo ${name//i/F}
  panglFjFng
  # echo $name
  panglijing
  # newname=${name//i/F}
  # echo $newname
  panglFjFng
  #
  按条件掐头去尾
  ${var 替换符号 表达式}
  echo ${var 替换符号 表达式}
  变量名=${var 替换符号 表达式}
  表达式的表示方法
  通配符
  普通字符
  通配符+普通字符
  字符串删除
  从左向右,把变量中与表达式匹配的数据删除
  #    最短匹配删除
  ##最长匹配删除
  从右向左,把变量中与表达式匹配的数据删除
  %    最短匹配删除
  %%最长匹配删除
  825echo ${MAIL##*/}
  826mailbox=${MAIL##*/}
  827mailuser=${MAIL##*/}
  828echo $mailuser
  829echo $MAIL
  830echo ${MAIL % /root}
  831echo ${MAIL%/root}
  832echo $MAIL
  833echo ${MAIL%/*}
  ----------------------------------------------------------------------
  获取字符串的部分数据
  ----------------------------------------------------------------------
  给变量赋初值
  ${变量名 符号 "值"}
  echo${变量名 符号 "值"}
  变量名=${变量名 符号 "值"}
  --------------------------------------------------------------------
  :=
  ${var:="word"}
  若变量var已存在且非Null,则返回 $var 的值,
  否则返回字串“word”,并赋值给变量 var
  ---------------------------------------------------------------------
  :+
  ${var:+"word"}
  若变量var已存在且非Null,则返回字串“word”,反之返回null值。
  作用:判断一个是否定义。
  ----------------------------------------------------------------------
  :-
  ${var:-"word"}
  若变量var已存在且非Null,则返回 $var 的值
  否则返回字串“word”,变量var值不变。
  ----------------------------------------------------------------------
  :?
  ${var:?}
  ${var:?"word"}
  若变量var已存在且非Null,则返回 $var 的值
  ,否则返回字串“word”,并结束脚本。
  作用:输出因变量没有定义所导致的错误。
  #!/bin/bash
  read -p "please input numbers " x
  #x=${x:-"1"}
  #y=${x:="1"}
  #y=${x:+"1"}
  y=${x:?}
  echo '$x is ' $x
  echo $y
  ---------------------------------------------------------------------
  # cat check_veryone_ip.sh
  #!/bin/bash
  ip=${1:-"127.0.0.1"}
  ping-c3$ip&> /dev/null
  if [ $? -eq0];then
  echo $ipis online
  else
  echo $ip is not online
  fi
  #
  +++++++++++++++++++++++++++++++++++++++++++++++++++
  数组
  定义数组 declare -a 数组名
  赋值数组名=(lili hahaxixi)
  使用数组元素 ${数组名[下标]}
  输出某个数组元素的值 echo ${数组名[下标]}
  查看所有数组 declare -a
  查看某个数组 declare -a | grep 数组名
  输出数组元素值的方式:
  echo ${ 数组名[@]:N}从数组的N那一个下标开始显示元素值,默认下标值为0
  echo ${数组名[@]:N:M}   M共显示几个元素
  向已有数组里添加新元素:数组名[下标]=值
  下标没有被已有元素使用,就是向数组添加新元素
  若下标已经被已有元素使用,就是修改已有元素的值
  删除数组中的某个元素:unset   数组名[下标]
  清空数组元素:数组名=()
  删除数组变量:unset   数组名
  调用数组元素:${数组名[下标]}
  屏幕输入3个ip地址,保存到ipgrp数组里,并在屏幕输出第二个IP
  #!/bin/bash
  read -p "qing shuru yige ipdizhi: " ipa
  read -p "qing shuru yige ipdizhi: " ipb
  read -p "qing shuru yige ipdizhi: " ipc
  ipgrp=($ipa $ipb $ipc)
  echo ${ipgrp}
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++expect把交互操作,通过非交互的方式完成
  rpm-qexpect||yum-yinstall expect
  whichexpect
  1触发交互式操作spawn
  2捕获上条命令执行后,输出的数据捕获为成功expect
  3捕获到数据之后发送指令   send"指令\r"
  spawn   ftp172.40.3.38
  expect   "捕获的数据"
  send"指令\r"
  -----------------------------------------------------------------
  vimautogetfile.expect    从ftp服务器上下载文件到本机
  #!/usr/bin/expect
  set ip"localhost"
  set username "ftp"
  set password ""
  set path[ lindex $argv 0 ]
  set file[ lindex $argv 1 ]
  spawn   ftp $ip
  expect "Name"
  send "$username\r"
  expect "Password"
  send "$password\r"
  expect "ftp>"
  send"cd $path\r"
  expect "ftp>"
  send "get $file\r"
  expect "ftp>"
  send"bye\r"
  :wq

页: [1]
查看完整版本: shell字符串处理-数组-expect