利用 if .... then
- 单层、简单条件判断式
if [ 条件判断式 ]; then |
- && 代表 AND ;
- || 代表 or ;
[ "$yn" == "Y" -o "$yn" == "y" ]
上式可替换为
[ "$yn" == "Y" ] || [ "$yn" == "y" ]
[root@www scripts]# cp sh06.sh sh06-2.sh <==用改的比较快! |
- 多重、复杂条件判断式
# 一个条件判断,分成功进行与失败进行 (else) |
# 多个条件判断 (if ... elif ... elif ... else) 分多种不同情况运行 |
[root@www scripts]# cp sh06-2.sh sh06-3.sh |
一般来说,如果你不希望使用者由键盘输入额外的数据时, 让使用者在下达命令时就将参数带进去! 现在我们想让使用者输入『 hello 』这个关键字时,利用参数的方法可以这样依序设计:文章来源地址:https://www.yii666.com/article/758035.html
- 判断 $1 是否为 hello,如果是的话,就显示 "Hello, how are you ?";
- 如果没有加任何参数,就提示使用者必须要使用的参数下达法;
- 而如果加入的参数不是 hello ,就提醒使用者仅能使用 hello 为参数。
整个程序的撰写可以是这样的:
[root@www scripts]# vi sh09.sh |
netstat命令可以查询到目前主机有开启的网络服务端口 (service ports)
[root@www ~]# netstat -tuln |
上面的重点是『Local Address (本地主机的IP与端口对应)』那个栏位,他代表的是本机所启动的网络服务!若为 127.0.0.1 则是仅针对本机开放,若是 0.0.0.0 或 ::: 则代表对整个 Internet 开放。 每个端口 (port) 都有其特定的网络服务,几个常见的 port 与相关网络服务的关系是:
- 80: WWW
- 22: ssh
- 21: ftp
- 25: mail
- 111: RPC(远程程序呼叫)
- 631: CUPS(列印服务功能)
假设我的主机有兴趣要侦测的是比较常见的 port 21, 22, 25及 80 时,那我如何透过 netstat 去侦测我的主机是否有开启这四个主要的网络服务端口呢?由於每个服务的关键字都是接在冒号『 : 』后面, 所以可以藉由撷取类似『 :80 』来侦测的!那我就可以简单的这样去写这个程序喔:
[root@www scripts]# vi sh10.sh |
由於日期是要用相减的方式来处置,所以我们可以透过使用 date 显示日期与时间,将他转为由 1970-01-01 累积而来的秒数, 透过秒数相减来取得剩余的秒数后,再换算为日数即可。整个脚本的制作流程有点像这样:文章地址https://www.yii666.com/article/758035.html
- 先让使用者输入他们的退伍日期;
- 再由现在日期比对退伍日期;
- 由两个日期的比较来显示『还需要几天』才能够退伍的字样。
利用『 date --date="YYYYMMDD" +%s 』转成秒数后,接下来的动作就容易的多了!如果你已经写完了程序,对照底下的写法试看看:
[root@www scripts]# vi sh11.sh |
利用 case ..... esac 判断
case $变量名称 in <==关键字为 case ,还有变量前有钱字号 |
[root@www scripts]# vi sh09-2.sh |
/etc/init.d/syslog restart
一般来说,使用『 case $变量 in 』这个语法中,当中的那个『 $变量 』大致有两种取得的方式:
- 直接下达式:例如上面提到的,利用『 script.sh variable 』 的方式来直接给予 $1 这个变量的内容,这也是在 /etc/init.d 目录下大多数程序的设计方式。
- 互动式:透过 read 这个命令来让使用者输入变量的内容。
让使用者能够输入 one, two, three ,
并且将使用者的变量显示到萤幕上,如果不是 one, two, three 时,就告知使用者仅有这三种选择。
[root@www scripts]# vi sh12.sh |
利用 function 功能
function fname() { |
因为 shell script 的运行方式是由上而下,由左而右, 因此在 shell script 当中的 function 的配置一定要在程序的最前面, 这样才能够在运行时被找到!网址:yii666.com
[root@www scripts]# vi sh12-2.sh |
function 也是拥有内建变量的,
函数名称代表示 $0 ,而后续接的变量也是以 $1, $2...
[root@www scripts]# vi sh12-3.sh |