1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。
網橋:
網橋是早期的二層網絡設備,每個端口分別有一條獨立的交換信道,不是共享一條信道,可隔離沖突域。網橋比集線器(Hub)性能更好,集線器上各端口都是共享同一條信道的,工作于數據鏈路層。后被端口更多的交換機替代。
集線器:
多端口中繼器,工作在物理層,本身不具備識別信號的能力,只是起到把信號放大再傳輸出去的作用。工作原理是廣播,它的所有端口是共享帶寬,每個端口的實際可用帶寬隨著端口數的增加而遞減,當信息繁忙時,多個端口可能同進一個信道,而一個信道在給定時刻只允許一個端口占用,所以其他端口經常處于監聽等待狀態。集線器采用的是半雙工方式進行傳輸,雖然可以雙向,但不能同時,要么發送,要么接受,嚴重影響網絡性能,所有端口同在一個沖突域和廣播域。
二層交換機:
工作于數據鏈路層,不僅能把信號放大,還能夠識別幀,對數據進行流量和差錯控制。每個端口都有一條獨占的帶寬,每個端口都是一個沖突域,當兩個端口交換信息時,并不影響其他端口的工作,它為用戶提供的是點對點的連接,數據包只發向目的端口,而不會向所有端口發送。交換機既可以用半雙工方式傳輸又可以用全雙工方式傳輸,大大增強了網絡的利用率。
三次交換機:
除了擁有交換機的功能外,還可提供路由功能,可隔離沖突域和廣播域,應用于大型局域網中,可進行網際互聯。
路由器:
工作在網絡層設備,轉發數據包并提供路徑選擇,可進行網際互聯。
2、IP地址的分類有哪些?子網掩碼的表示形式及其作用
1. A類IP地址 (子網掩碼:255.0.0.0)
一個A類IP地址由1字節的網絡地址和3字節主機地址組成,網絡地址的最高位必須是“0”, 地址范圍從1.0.0.0 到126.0.0.0??捎玫腁類網絡有126個,每個網絡能容納1億多個主機。
2. B類IP地址 (子網掩碼:255.255.0.0)
一個B類IP地址由2個字節的網絡地址和2個字節的主機地址組成,網絡地址的最高位必須是“10”,地址范圍從128.0.0.0到191.255.255.255??捎玫腂類網絡有16382個,每個網絡能容納6萬多個主機 。
3. C類IP地址 (子網掩碼:255.255.255.0)
一個C類IP地址由3字節的網絡地址和1字節的主機地址組成,網絡地址的最高位必須是“110”。范圍從192.0.0.0到223.255.255.255。C類網絡可達209萬余個,每個網絡能容納254個主機。
4. D類地址用于多點廣播(Multicast)。
D類IP地址第一個字節以“lll0”開始,它是一個專門保留的地址。它并不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協議的一組計算機。
5. E類IP地址
以“llll0”開始,為將來使用保留。
在IP地址3種主要類型里,各保留了3個區域作為私有地址,其地址范圍如下:
127.0.0.1~127.255.255.254 (本地回環地址)
A類地址:10.0.0.0~10.255.255.255
B類地址:172.16.0.0~172.31.255.255
C類地址:192.168.0.0~192.168.255.255
3、計算機網絡的分成模型有哪些(OSI模型和TCP/IP模型),每一層的功能及涉及到的物理設備有哪些。
OSI模型:
物理層:完成相鄰節點之間原始比特流的傳輸,將數字”1/0“翻譯成電信號,規定物理接口的標準,傳輸單位是比特,集線器工作于物理層。
數據鏈路層:如何在不可靠的物理線路上進行數據的可靠傳輸,進行差錯控制,流量控制,網橋和二層交換機工作于此層。
網絡層:完成網絡中主機間的報文傳輸,其關鍵問題之一就是使用數據鏈路層的服務將每個報文從源端傳輸到目標端,路徑的選擇,路由器和三層交換機工作于此層。
傳輸層:實現網絡中不同主機上的用戶進程之間可靠的數據通信。負責傳輸的整體工作,差錯控制和流量控制。
會話層:允許不同機器上的用戶之間建立會話關系,管理會話。
表示層:用于完成某些特定功能,對這些功能人們常常希望找到普遍的解決辦法,而不必由每個用戶自己來實現,數據格式的轉換,壓縮與解壓縮,加密與解密。
應用層:支持運行于不同計算機的進程彼此之間的通信,而這些進程則是為用戶完成不同任務而設計的,為用戶體提供程序接口。
TCP/IP模式:
網絡接口層:對應于OSI模型的物理層和數據鏈路層
網絡層:對應于OSI模型的網絡層
傳輸層:對應于OSI模型的傳輸層
應用層:對應于OSI模型的會話層,表示層,應用層
4、如何將Linux主機接入到TCP/IP網絡,請描述詳細的步驟。(手動指定的方式)
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:5A:C1:B7
TYPE=Ethernet
UUID=4f1e9841-e705-40bb-9935-d2a7916db6c8
ONBOOT=yes (默認為no,需要設置成yes)
NM_CONTROLLED=yes
BOOTPROTO=static (static:靜態ip,dhcp:自動獲取ip)
IPADDR=192.168.1.131 (設置ip地址)
NETMASK=255.255.255.0 (設置子網掩碼)
GATEWAY=192.168.1.1 (設置默認網關)
DNS1=192.168.1.1 (設置DNS服務器的指向)
5、為Linux主機配置網絡信息的方式有哪些,請描述各個過程。
(1)ip命令:
[root@localhost ~]# ip addr add 192.168.2.100/24 dev eth1 (設置ip地址)
[root@localhost ~]# ip route add default gw 192.168.2.1 dev eth1 (設置默認路由)
(2)ifocnfig命令:
[root@localhost ~]# ifconfig eth1 address 192.168.2.101/24
(3)編輯/etc/sysconfig/network-scripts/interface配置文件
(4)進入配置界面設置:system-config-network或setup (CentOS 6)
nmtul (CentOS 7)
6、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;
在線的主機使用綠色顯示;
不在線的主使用紅色顯示;
#!/bin/bash
# Author: liuguohui
# Date: 2016-10-04
# Email: liuguohui1008@sina.com
# Descriptions:
#
net=172.16.250
for((i=1;i<=254;i++))
do
if ping -c 1 -w 1 $net.$i &> /dev/null;then
echo -e "\033[32m $net.$i\033[0m"
else
echo -e "\033[31m $net.$i\033[0m"
fi
done
7、詳細描述每個網絡接口的配置文件中各個參數的含義和其所對應的值;
TYPE=Ethernet 接口類型,常見的有Ethernet,Bridge
BOOTPROTO=static 激活次接口時使用什么協議來配置接口屬性,常有dhcp,bootp,static,none
PEERDNS=yes 如果bootproto的值為dhcp,是否允許dhcp server分配的dns服務器指向覆蓋本地手動指定的dns服務指向
IPV6INIT=yes 是否初始化ipv6
NAME=eno16777736
UUID=ccb25f8e-2f8b-4c42-b0eb-0382fa3ad39a 此設備的唯一標識
DEVICE=eno16777736 此配置文件對應的設備名稱
ONBOOT=yes 在系統引導過程中,是否激活此接口
NM_CONTROLLED=yes 是否使用NetworkManager服務來控制接口
DOMAIN= dns搜索域
USERCTL= 是否允許普通用戶控制此設備
IPADDR= ip地址
NETMASK= 子網掩碼:centos 7支持使用PREFIX以長度方式指明子網掩碼
GATEWAY= 默認網關
DNS1= DNS服務器指向
DNS2= 備用DNS服務器指向
8、如何給網絡接口配置多個地址,有哪些方式?
(1)ip命令
[root@localhost ~]# ip addr add 192.168.2.100/24 dev eth1 (配置第一個地址)
[root@localhost ~]# ip addr add 192.168.3.100/24 dev eth1 (配置第二個地址)
[root@localhost ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:5a:c1:c1 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.100/24 scope global eth1
inet 192.168.3.100/24 scope global eth1
inet6 fe80::20c:29ff:fe5a:c1c1/64 scope link
valid_lft forever preferred_lft forever
(2)ifconfig
[root@localhost ~]# ifconfig eth1 192.168.4.100/24 (配置第一個地址)
[root@localhost ~]# ifconfig eth1:0 192.168.5.100/24 (配置第二個地址,網卡需要指定別名)
[root@localhost ~]# ifconfig
eth1 Link encap:Ethernet HWaddr 00:0C:29:5A:C1:C1
inet addr:192.168.4.100 Bcast:192.168.4.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe5a:c1c1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1281 (1.2 KiB) TX bytes:468 (468.0 b)
eth1:0 Link encap:Ethernet HWaddr 00:0C:29:5A:C1:C1
inet addr:192.168.5.100 Bcast:192.168.5.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
(3)修改配置文件
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ (進入/etc/sysconfig/network-scripts/目錄下)
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1 (復制網卡配置文件ifcfg-eth0并取別名為ifcfg-eth0:1)
[root@localhost network-scripts]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 (編輯eth0的配置文件)
DEVICE=eth0
HWADDR=00:0C:29:5A:C1:B7
TYPE=Ethernet
UUID=4f1e9841-e705-40bb-9935-d2a7916db6c8
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.131
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
[root@localhost network-scripts]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:1 (編輯eth0:1的配置文件)
DEVICE=eth0
HWADDR=00:0C:29:5A:C1:B7
TYPE=Ethernet
UUID=4f1e9841-e705-40bb-9935-d2a7916db6c8
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
9、常用的網絡管理類工具有哪些,并用示例形式描述他們的使用方法。
(1)ifconfig命令
ifconfig [interface]
# ifconfig -a
# ifconfig INTERFACE [up|down]
ifconfig interface [aftype] options | address …
# ifconfig INTERFACE IP/mask [up]
# ifconfig INTERFACE IP netmask MASK
(2)route命令
路由管理命令
查看:route -n
添加:route add
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
目標:192.168.1.3 網關:172.16.0.1
~]# route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
目標:192.168.0.0 網關:172.16.0.1
~]# route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
~]# route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
默認路由,網關:172.16.0.1
~]# route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
~]# route add default gw 172.16.0.1
刪除:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
目標:192.168.1.3 網關:172.16.0.1
~]# route del -host 192.168.1.3
目標:192.168.0.0 網關:172.16.0.1
~]# route del -net 192.168.0.0 netmask 255.255.255.0
(3) netstat命令:
netstat – Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
顯示網絡連接:
netstat [–tcp|-t] [–udp|-u] [–raw|-w] [–listening|-l] [–all|-a] [–numeric|-n] [–extend|-e[–extend|-e]] [–program|-p]
-t: tcp協議相關
-u: udp協議相關
-w: raw socket相關
-l: 處于監聽狀態
-a: 所有狀態
-n: 以數字顯示IP和端口;
-e:擴展格式
-p: 顯示相關進程及PID
常用組合:
-tan, -uan, -tnl, -unl
顯示路由表:
netstat {–route|-r} [–numeric|-n]
-r: 顯示內核路由表
-n: 數字格式
顯示接口統計數據:
netstat {–interfaces|-I|-i} [iface] [–all|-a] [–extend|-e] [–program|-p] [–numeric|-n]
# netstat -i
# netstat -I IFACE
(4) ip命令:
ip – show / manipulate routing, devices, policy routing and tunnels
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route }
link OBJECT:
ip link – network device configuration
set
dev IFACE
可設置屬性:
up and down:激活或禁用指定接口;
show
[dev IFACE]:指定接口
[up]:僅顯示處于激活狀態的接口
ip address – protocol address management
ip addr { add | del } IFADDR dev STRING
[label LABEL]:添加地址時指明網卡別名
[scope {global|link|host}]:指明作用域
global: 全局可用;
link: 僅鏈接可用;
host: 本機可用;
[broadcast ADDRESS]:指明廣播地址
例如:
ip addr add 192.168.1.111/24 dev eth0 label eth0:0
ip address show – look at protocol addresses
[dev DEVICE]
[label PATTERN]
[primary and secondary]
ip address flush – flush protocol addresses
使用格式同show
p route – routing table management
ip route add
添加路由:ip route add TARGET via GW dev IFACE src SOURCE_IP
TARGET:
主機路由:IP
網絡路由:NETWORK/MASK
添加網關:ip route add defalt via GW dev IFACE
ip route delete
刪除路由:ip route del TARGET
ip route show
ip route flush
[dev IFACE]
[via PREFIX]
(5) ss命令:
格式:ss [OPTION]… [FILTER]
選項:
-t: tcp協議相關
-u: udp協議相關
-w: 裸套接字相關
-x:unix sock相關
-l: listen狀態的連接
-a: 所有
-n: 數字格式
-p: 相關的程序及PID
-e: 擴展的信息
-m:內存用量
-o:計時器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
10、Linux系統軟件包管理方法(安裝、升級、卸載等操作)有哪些,以及如何管理的。
安裝:
rpm {-i|–install} [install-options] PACKAGE_FILE …
-v: verbose
-vv:
-h: 以#顯示程序包管理執行進度;每個#表示2%的進度
rpm -ivh PACKAGE_FILE …
[install-options]
–test: 測試安裝,但不真正執行安裝過程;dry run模式;
–nodeps:忽略依賴關系;
–replacepkgs: 重新安裝;
–nosignature: 不檢查來源合法性;
–nodigest:不檢查包完整性;
–noscipts:不執行程序包腳本片斷;具體分為以下四類:(可單獨選擇某類)
%pre: 安裝前腳本; –nopre
%post: 安裝后腳本; –nopost
%preun: 卸載前腳本; –nopreun
%postun: 卸載后腳本; –nopostun
升級:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
upgrage:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”;
freeshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
其他選項與上面安裝一樣
–oldpackage:降級;
–force: 強行升級;
注意:
(1)uname -r 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核
(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
查詢:
rpm {-q|–query} [select-options] [query-options]
[select-options]
-a: 所有包
-f: 查看指定的文件由哪個程序包安裝生成
# rpm -qf /etc/fstab
setup-2.5.58-9.el5
-p /PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作;
查詢尚未安裝的程序包
rpm -qlp /PATH/TO/PACKAGE_FILE
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供;
–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
[query-options]
–changelog:查詢rpm包的changlog (制作的,非作者發布的)
-c: 查詢程序的配置文件
-d: 查詢程序的生成文檔
-i: information
-l: 查看指定的程序包安裝后生成的所有文件;
–scripts:程序包自帶的腳本片斷
-R: 查詢指定的程序包所依賴的CAPABILITY;
–provides: 列出指定程序包所提供的CAPABILITY;
–conflicts:列出創建包與哪些包可能沖突
用法:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, …
-qa
卸載:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts]
[–notriggers] [–test] PACKAGE_NAME …
校驗:
rpm {-V|–verify} [select-options] [verify-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
包來源合法性驗正及完整性驗正:
完整性驗正:SHA256
來源合法性驗正:RSA
公鑰加密:
對稱加密:加密、解密使用同一密鑰;
非對稱加密:密鑰是成對兒的,
public key: 公鑰,公開所有人
secret key: 私鑰, 不能公開
導入所需要公鑰:
rpm –import /PATH/FROM/GPG-PUBKEY-FILE
CentOS 7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7
數據庫重建:
rpm {–initdb|–rebuilddb}
initdb: 初始化
如果事先不存在數據庫,則新建之;否則,不執行任何操作;
rebuilddb:重建
無論當前存在與否,直接重新創建數據庫;
11、如何使用發行版光盤作為yum repository,請描述該過程。
[root@localhost ~]# mount /dev/cdrom1 /mnt
[root@localhost ~]# vim /etc/yum.repos.d/localyum.repos
[cdrm]
name=cdrm 名稱
baseurl=file:///mnt/ 路徑
cost=1 代價
gpgcheck=0 不檢查
enabled=1 開啟
12、寫一個腳本,完成以下功能
(1) 假設某目錄(/etc/rc.d/rc3.d/)下分別有K開頭的文件和S開頭的文件若干;
(2) 顯示所有以K開頭的文件的文件名,并且給其附加一個stop字符串;
(3) 顯示所有以S開頭的文件的文件名,并且給其附加一個start字符串;
(4) 分別統計S開頭和K開頭的文件各有多少;
#!/bin/bash
# Author: liuguohui
# Date: 2016-10-12
# Email: liuguohui1008@sina.com
# Descriptions:
#
declare -i k_id=0
declare -i s_id=0
for i in $(ls /etc/rc.d/rc3.d/); do
if echo $i |grep -i "^k" >/dev/null; then
var=$(echo $i |sed 's/^[kK].*/& stop/')
let k_id++
echo $var
elif echo $i |grep -i "^s" >/dev/null; then
var=$(echo $i |sed 's/^[sS].*/& start/')
let s_id++
echo $var
fi
done
echo "k_total:$k_id"
echo "s_total:$s_id"
腳本執行效果:
[root@localhost test]# bash file.sh
K10saslauthd stop
K15svnserve stop
K87named stop
K87restorecond stop
K89netconsole stop
K89rdisc stop
K92iptables stop
S02lvm2-monitor start
S10network start
S11auditd start
S11portreserve start
S22messagebus start
S25blk-availability start
S25netfs start
S26haldaemon start
S26udev-post start
S55sshd start
S99libvirt-guests start
S99local start
k_total:7
s_total:12
13、寫一個腳本,完成以下功能
(1) 腳本能接受用戶名作為參數;
(2) 計算此些用戶的ID之和;
#!/bin/bash
#
declare -i uid_sum=0
[ $# -lt 2 ] && echo "At least two user_id" && exit 1
for i in $*; do
if id $i &>/dev/null; then
uid=$(id -u $i)
uid_sum+=$uid
else
echo "$i no exist !" && exit 2
fi
done
echo $uid_sum
腳本執行效果:
[root@localhost test]# bash file7.sh visitor1 visitor2 visitor3
1503
14、寫一個腳本
(1) 傳遞一些目錄給此腳本;
(2) 逐個顯示每個目錄的所有一級文件或子目錄的內容類型;
(3) 統計一共有多少個目錄;且一共顯示了多少個文件的內容類型;
#!/bin/bash
#
declare -i dir_sum=0
declare -i file_sum=0
if [ $# -lt 1 ]; then
echo "At least a argument" && exit 2
fi
for i in $*; do
if ! [ -d $i ]; then
echo "input directory please !" && exit 3
fi
for filename in $i/*; do
if [ -d $filename ]; then
echo "$filename is directory"
let dir_sum++
elif [ -f $filename ]; then
echo "$filename is ASCII file"
let file_sum++
elif [ -b $filename ]; then
echo "$filename is block file"
let file_sum++
elif [ -c $filename ]; then
echo "$filename is charactor file"
let file_sum++
elif [ -L $filename ]; then
echo "$filename is symbolic file"
let file_sum++
elif [ -p $filename ]; then
echo "$filename is pipo file"
let file_sum++
elif [ -S $filename ]; then
else
echo "Unkown"
fi
done
done
echo "total directory:$dir_sum"
echo "total file:$file_sum"
執行腳本效果:
[root@localhost ~]# bash file.sh /root /var
/root/anaconda-ks.cfg is ASCII file
/root/fengzheng is directory
/root/file.sh is ASCII file
/root/fstab is ASCII file
/root/man_db.conf is ASCII file
/root/test is ASCII file
/root/test1 is ASCII file
/var/adm is directory
/var/cache is directory
/var/crash is directory
/var/db is directory
/var/empty is directory
/var/games is directory
/var/gopher is directory
/var/kerberos is directory
/var/lib is directory
/var/local is directory
/var/lock is directory
/var/log is directory
/var/mail is directory
/var/nis is directory
/var/opt is directory
/var/preserve is directory
/var/run is directory
/var/spool is directory
/var/tmp is directory
/var/yp is directory
total directory:21
total file:6
15、寫一個腳本
通過命令行傳遞一個參數給腳本,參數為用戶名
如果用戶的id號大于等于500,則顯示此用戶為普通用戶;
#!/bin/bash
#
if [ $# -lt 1 ]; then
echo "one username needed !" && exit 1
elif ! id $1 &>/dev/null; then
echo "$1 not exist !"&& exit 2
elif [ $(id -u $1) -ge 500 ]; then
echo "$1 is user"
else
echo "$1 not user"
fi
輸入不同的用戶名驗證各種效果:
[root@localhost test]# bash file8.sh visitor1
visitor1 is user
[root@localhost test]# bash file8.sh root
root not user
[root@localhost test]# bash file8.sh join
join not exist !
16、寫一個腳本
(1) 添加10用戶user1-user10;密碼同用戶名;
(2) 用戶不存在時才添加;存在時則跳過;
(3) 最后顯示本次共添加了多少用戶;
#/bin/bash
#
declare -i count=0
for i in user{1..10}; do
if id $i &>/dev/dull; then
echo "$i already exist !"
continue
else
useradd $i
echo $i |passwd –stdin $i
let count++
fi
done
echo "total:$count"
運行腳本驗證效果:
[root@localhost test]# bash file9.sh
Changing password for user user1.
passwd: all authentication tokens updated successfully.
Changing password for user user2.
passwd: all authentication tokens updated successfully.
Changing password for user user3.
passwd: all authentication tokens updated successfully.
Changing password for user user4.
passwd: all authentication tokens updated successfully.
Changing password for user user5.
passwd: all authentication tokens updated successfully.
Changing password for user user6.
passwd: all authentication tokens updated successfully.
Changing password for user user7.
passwd: all authentication tokens updated successfully.
Changing password for user user8.
passwd: all authentication tokens updated successfully.
Changing password for user user9.
passwd: all authentication tokens updated successfully.
Changing password for user user10.
passwd: all authentication tokens updated successfully.
total:10
[root@localhost test]# bash file9.sh
user1 already exist !
user2 already exist !
user3 already exist !
user4 already exist !
user5 already exist !
user6 already exist !
user7 already exist !
user8 already exist !
user9 already exist !
user10 already exist !
total:0
17、寫一腳本,用ping命令測試172.16.250.20-172.16.250.100以內有哪些主機在線,將在線的顯示出來;
#!/bin/bash
#
for i in 172.16.250.{20..100}; do
if ping -c 4 $i &>/dev/dull; then
echo $i
fi
done
18、打印九九乘法表;
#!/bin/bash
# Author: liuguohui
# Date: 2016-10-010
# Email: liuguohui1008@sina.com
# Descriptions: print multiplication table
#
declare -i a=1
declare -i b=1
for a in {1..9};do
for b in {1..9};do
if [ $a -ge $b ]; then
echo -n -e "$b*$a=$(($a*$b))\t"
fi
done
echo
done
[root@localhost test]# !bash
bash file1.sh
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
原創文章,作者:heianyangguo,如若轉載,請注明出處:http://www.www58058.com/49932
注意排版,如能寫一兩個命令常用的相對復雜的例子就更好了