linux -fi linux版软件网站
linux 每个if都要搭配一个fi吗
每个if语句都要用fi结束,而且是每一个if都要对应一个fi。
整个if语句用fi闭合起来才算完整,书写时if和fi要垂直对齐以方便查看。
格式举例:
if condition
then
command1
command2
fi
condition是判断条件,如果 condition成立(返回“真”),那么 then后边的语句将会被执行;如果 condition不成立(返回“假”),那么不会执行任何语句。最后必须以fi来闭合,fi就是 if倒过来拼写,即使有多条语句也不需要用{}包围起来。
扩展资料
shell if多条件的格式用法介绍
shell支持任意数目的分支,当分支比较多时,可以使用 if elif else结构,它的格式为:
if condition1
then
statement1
elif condition2
then
statement2
elif condition3
then
statement3
else
statementn
fi
注意,if和 elif后边都得跟着 then。整条语句的执行逻辑为:
如果 condition1成立,那么就执行 if后边的 statement1;如果 condition1不成立,那么继续执行 elif,判断 condition2。
如果 condition2成立,那么就执行 statement2;如果 condition2不成立,那么继续执行后边的 elif,判断 condition3。
如果 condition3成立,那么就执行 statement3;如果 condition3不成立,那么继续执行后边的 elif。
如果所有的 if和 elif判断都不成立,就进入最后的 else,执行 statementn。
Linux中Wi-Fi无线网络和AP无线热点的配置教程
0.Linux下的Wi-Fi配置
无线网络飞速发展的今天,许多设备都提供了连接无线网络的功能。
那么Linux下的wifi到底该怎么配置、连接呢??
开始配置之前,我们要说说iw家族。iw是linux下常用的wifi配置工具,网上有相应的库和源码。全名为wirelessTools。
配置wifi模块,并连接相应的无线网络过程:主要使用iwpriv命令
(1)扫描可用的无线网络:
代码如下:
iwlist wifi-name scanning
其中wifi-name为无线网卡的名字,比如网卡eth0就是系统默认的网卡名字, wifi-name可以用ifconfig查看,一般为ra0。
(2)看扫描到的网络信息,按要连接的网络类型进行配置。以下为扫描到的网络:
代码如下:
iwlist ra0 scanning
===rt_ioctl_giwscan. 11(11) BSS returned, data-length= 1427
ra0 Scan completed:
Cell 01- Address: C4:CA:D9:1D:9E:A0
Protocol:802.11b/g/n
ESSID:""
Mode:Managed
Frequency:2.412 GHz(Channel 1)
Quality=7/100 Signal level=-87 dBm Noise level=-82 dBm
Encryption key:off
Bit Rates:54 Mb/s
Cell 02- Address: FC:75:16:A1:A9:16
Protocol:802.11b/g/n
ESSID:"jxj_rd"
Mode:Managed
Frequency:2.452 GHz(Channel 9)
Quality=94/100 Signal level=-53 dBm Noise level=-92 dBm
Encryption key:on
Bit Rates:54 Mb/s
IE: WPA Version 1
Group Cipher: TKIP
Pairwise Ciphers(2): TKIP CCMP
Authentication Suites(1): PSK
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher: TKIP
Pairwise Ciphers(2): TKIP CCMP
Authentication Suites(1): PSK
Cell 03- Address: C4:CA:D9:02:2A:70
Protocol:802.11b/g/n
ESSID:""
Mode:Managed
Frequency:2.462 GHz(Channel 11)
Quality=83/100 Signal level=-57 dBm Noise level=-92 dBm
Encryption key:off
Bit Rates:54 Mb/s
Cell 04- Address: 14:D6:4D:75:CA:9C
Protocol:802.11b/g/n
ESSID:"liangym"
Mode:Managed
Frequency:2.472 GHz(Channel 13)
Quality=100/100 Signal level=-27 dBm Noise level=-92 dBm
Encryption key:on
Bit Rates:54 Mb/s
IE: WPA Version 1
Group Cipher: CCMP
Pairwise Ciphers(1): CCMP
Authentication Suites(1): PSK
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher: CCMP
Pairwise Ciphers(1): CCMP
Authentication Suites(1): PSK
如上:ESSID项的值即为无线网络的名字,如上的jxj_rd等。如果值为空,说明在无线路由勾选了隐藏ESSID的选项。
ESSID是很关键的,如果被隐藏了,也不是不能连接,而是需要破解,用到其他的工具,非常麻烦。至于如何破解,不是本文叙述的内容,有兴趣的朋友可以网上搜索。
得到了网络的信息,接下来就是配置连接选项了。以连接jxj_rd为例,我们看看具体的过程:
(1)设置要连接的网络类型:
代码如下:
iwpriv ra0 set NetworkType=Infra
(2)设置要连接的无线网络的安全模式:
代码如下:
iwpriv ra0 set AuthMode=WPA2PSK
(3)设置网络加密方式:(CCMP即为AES)
代码如下:
iwpriv ra0 set EncrypType=TKIP
(4)设置连接时的密码:********为加密网络的密码
代码如下:
iwpriv ra0 set WPAPSK=*******
(5)连接该网络:有两种方式:
A、用iwpriv命令
代码如下:
iwpriv ra0 set SSID=jxj_rd
B、用iwconfig命令
代码如下:
iwconfig ra0 essid jxj_rd
至此,如果密码正确,就可以连接上网络jxj_rd了。如果你不放心,可以用命令查看状态:
代码如下:
iwpriv ra0 connStatus
当然,你也可以用iwconfig命令查看状态,这里不再赘述。
执行 iwlist如果 Supported interface modes的下有 AP的话表示该网卡支持AP模式,可以创建无线热点。
比如我的无线网卡是Qualcomm Atheros AR9485 Wireless Network Adapter,Linux内核自带了驱动ath9k,支持创建AP无线热点。
下面我们就着重来讲无线热点的创建步骤:
1.安装hostapd和dhcpd
代码如下:
sudo apt-get install hostapd isc-dhcp-server
开机不需要启动这两个服务,建议把它们关掉:
代码如下:
sudo update-rc.d-f hostapd remove
注释掉下面两个文件start on那一行:
代码如下:
sudo nano/etc/init/isc-dhcp-server.conf
sudo nano/etc/init/isc-dhcp-server6.conf
2.配置hostapd和dhcpd
代码如下:
sudo nano/etc/hostapd/hostapd.conf
注意自己设置其中的无线热点名称ssid和认证密码wpa_passphrase.
代码如下:
interface=wlan0
driver=nl80211
ssid=YOUR_AP_NAME
hw_mode=g
channel=10
macaddr_acl=0
auth_algs=3
wpa=2
wpa_passphrase=YOUR_AP_PASSWORD
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP
sudo nano/etc/dhcp/dhcpd.conf
在末尾加入以下内容:
代码如下:
subnet 192.168.0.0 netmask 255.255.255.0
{
range 192.168.0.2 192.168.0.10;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.1,180.76.76.76,8.8.8.8;
}
其中180.76.76.76是百度公共DNS服务器,8.8.8.8则是Google的DNS服务器.
在自己的家目录下创建一个hostapd目录,里面新建启动和关闭脚本,比如我这样写(注意把里面eechen换成你的用户名):
代码如下:
nano /home/eechen/hostapd/ap-start.sh
代码如下:
#!/bin/bash
#开启内核IP转发
bash-c"echo 1/proc/sys/net/ipv4/ip_forward"
#开启防火墙NAT转发(如果本机使用eth0上网,则把ppp0改为eth0)
iptables-t nat-A POSTROUTING-o ppp0-j MASQUERADE
#关闭NetworkManager对无线网卡的控制
nmcli nm wifi off
#设置并启动无线网卡
ifconfig wlan0 192.168.0.1 netmask 255.255.255.0
#解锁无线设备,可以用rfkill list查看解锁结果.
rfkill unblock wlan
#睡眠6秒,待rfkill解锁生效
sleep 6s
#启动dhcpd和hostapd,如果hostapd无法启动请查看日志hostapd.log,查看这两个进程ps-ef|egrep"dhcpd|hostapd"
nohup hostapd/etc/hostapd/hostapd.conf/home/eechen/hostapd/hostapd.log 21
dhcpd wlan0-pf/var/run/dhcpd.pid
ps-ef|head-n1 ps-ef|egrep"dhcpd|hostapd"
nano /home/eechen/hostapd/ap-stop.sh
代码如下:
#!/bin/bash
killall hostapd dhcpd
bash-c"echo 0/proc/sys/net/ipv4/ip_forward"
ifconfig wlan0 down
3.启动hostapd和dhcpd
在桌面新建两个启动器(快捷方式),里面分别填入:
代码如下:
gksu/home/eechen/hostapd/ap-start.sh
gksu/home/eechen/hostapd/ap-stop.sh
因为脚本需要root用户身份执行,所以需要用gksu运行。
注意:如果你开启了ufw防火墙,ufw默认是禁止转发的,这会导致防火墙NAT转发失效,这时应该设置允许转发:
代码如下:
sudo nano/etc/default/ufw将 DEFAULT_FORWARD_POLICY设为 ACCEPT
然后重启ufw即可:
代码如下:
sudo service ufw restart
之后运行启动器即可启动和关闭AP无线热点。
4.用wireshark监控经过wlan0的通信
安装wireshark(其中 eechen改为你的用户名):
代码如下:
sudo apt-get install wireshark
sudo chgrp eechen/usr/bin/dumpcap
sudo chmod 750/usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin+eip/usr/bin/dumpcap
Alt+F2运行wireshark,选择网络接口wlan0,Filter里输入http.cookie contains mail.qq.com
然后手机端登录网页QQ邮箱,在WireShark即可查看和获取QQ邮箱登录的Cookie,如图所示:
右键点击Cookie项把Value复制出来,然后用Firefox访问站点,Alt+C激活 Original Cookie Injector( GreaseMonkey),弹出输入框Wireshark Cookie Dump,把Cookie项的Value粘贴到里面,然后点OK确定并刷新页面即可登录QQ邮箱。或者你使用Tamper Data这个Firefox扩展在提交时修改Cookie值也是可以的。
附:
查看连接wlan0网络的客户端:
代码如下:
sudo arp
返回IP地址和MAC硬件地址和无线接口名.
代码如下:
iw dev wlan0 station dump
能显示收发包和字节数等.
查看网络接口速度:
代码如下:
sar-n DEV 1
linux提示[-f: 未找到命令
首先, [后面要有空格。
其次确认你的系统里有 test命令,一般这个命令在/usr/bin下或者/bin下。如果这个命令有,那么再确认在同目录下有 [命令(如果没有 [,你可以 cp/path/to/test/path/to/[), [命令是 test的一个别名。然后你的脚本应该就可以用了。
如果这两个命令都能找到,但是仍然不能运行脚本,说明你的 PATH环境变量不对,可以在脚本里加上
PATH=$PATH:/path/to/xxx
其中/path/to/xxx是 test和 [所在目录