把當前系統前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