shell字符串處理-數組-expect

把當前系統前10個系統用戶名 和 uid號輸出到屏幕上
head  /etc/passwdshell

字符串截取
1${變量名:起始位置:長度}vim

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}bash

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-dom

head  -3  /etc/passwd  |  cut    -d  ":"  -f  1,3ide

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 ~]#ui

[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 ~]#
spa

+++++++++++++++++++++++++++++++++++++++++++++++++

字符串替換
    ${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

相關文章
相關標籤/搜索