设为首页 收藏本站
查看: 927|回复: 0

shell字符串处理-数组-expect

[复制链接]

尚未签到

发表于 2018-8-28 09:01:09 | 显示全部楼层 |阅读模式
  把当前系统前10个系统用户名 和 uid号输出到屏幕上
  head  /etc/passwd
  字符串截取
  1${变量名:起始位置:长度}
  echo   ${变量名:起始位置:长度}
  变量名=${变量名:起始位置:长度}
  806  echo $HOSTNAME
  808  ${HOSTNAME:0:3}
  809  echo ${HOSTNAME:0:3}
  810  echo $HOSTNAME
  811  echo ${HOSTNAME:0:5}
  812  domain=${HOSTNAME:0:5}
  813  echo $domain
  814  domain=${HOSTNAME:6}
  2  使用 expr substr
  [root@pc205 ~]# echo $HOSTNAME
  pc205.tarena.com
  [root@pc205 ~]#
  [root@pc205 ~]# expr substr "$HOSTNAME" 1 5
  pc205
  [root@pc205 ~]# expr length "$HOSTNAME"
  16
  [root@pc205 ~]# expr length "panglijing"
  10
  [root@pc205 ~]#
  3  使用cut工具
  echo $var | cut -b 起始位置-结束位置
  echo  $HOSTNAME  |  cut  -b   1-5
  echo  $HOSTNAME  |  cut  -b   6-
  head  -3  /etc/passwd  |  cut    -d  ":"  -f  1,3
  4 路径分割
  basename
  dirname
  [root@pc205 ~]# basename /etc/sysconfig/network-scripts/ifcfg-eth0
  ifcfg-eth0
  [root@pc205 ~]#
  [root@pc205 ~]#
  [root@pc205 ~]# basename /etc/passwd
  passwd
  [root@pc205 ~]# basename /etc/sysconfig/network-scripts
  network-scripts
  [root@pc205 ~]# basename /etc/sysconfig/network-scripts
  network-scripts
  [root@pc205 ~]#
  [root@pc205 ~]# dirname /etc/sysconfig/network-scripts/ifcfg-eth0
  /etc/sysconfig/network-scripts
  [root@pc205 ~]#
  [root@pc205 ~]# dirname /etc/sysconfig/network-scripts
  /etc/sysconfig
  [root@pc205 ~]#
  +++++++++++++++++++++++++++++++++++++++++++++++++
  字符串替换
  ${var/old/new}
  ${var//old/new}
  name=panglijing
  [root@B 桌面]# echo ${name/i/F}
  panglFjing
  [root@B 桌面]# echo ${name//i/F}
  panglFjFng
  [root@B 桌面]# echo $name
  panglijing
  [root@B 桌面]# newname=${name//i/F}
  [root@B 桌面]# echo $newname
  panglFjFng
  [root@B 桌面]#
  按条件掐头去尾
  ${var 替换符号 表达式}
  echo ${var 替换符号 表达式}
  变量名=${var 替换符号 表达式}
  表达式的表示方法
  通配符
  普通字符
  通配符+普通字符
  字符串删除
  从左向右,把变量中与表达式匹配的数据删除
  #    最短匹配删除
  ##  最长匹配删除
  从右向左,把变量中与表达式匹配的数据删除
  %    最短匹配删除
  %%  最长匹配删除
  825  echo ${MAIL##*/}
  826  mailbox=${MAIL##*/}
  827  mailuser=${MAIL##*/}
  828  echo $mailuser
  829  echo $MAIL
  830  echo ${MAIL % /root}
  831  echo ${MAIL%/root}
  832  echo $MAIL
  833  echo ${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
  ---------------------------------------------------------------------
  [root@B shell]# cat check_veryone_ip.sh
  #!/bin/bash
  ip=${1:-"127.0.0.1"}
  ping  -c  3  $ip  &> /dev/null
  if [ $? -eq  0  ];then
  echo $ip  is online
  else
  echo $ip is not online
  fi
  [root@B shell]#
  +++++++++++++++++++++++++++++++++++++++++++++++++++
  数组
  定义数组 declare -a 数组名
  赋值  数组名=(lili haha  xixi)
  使用数组元素 ${数组名[下标]}
  输出某个数组元素的值 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[1]}
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++expect  把交互操作,通过非交互的方式完成
  rpm  -q  expect  ||  yum  -y  install expect
  which  expect
  1  触发交互式操作  spawn
  2  捕获上条命令执行后,输出的数据捕获为成功  expect
  3  捕获到数据之后发送指令   send  "指令\r"
  spawn   ftp  172.40.3.38
  expect   "捕获的数据"
  send  "指令\r"
  -----------------------------------------------------------------
  vim  autogetfile.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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-557540-1-1.html 上篇帖子: linux shell中的各种奇怪符号 下篇帖子: Linux Shell常用技巧(一) RE-442938684
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表