总结
通过添加位置参数,我们现在可以编写相当实用的脚本。 对于简单、重复的任务,位置参数使得编写非常有用的 shell 函数成为可能,这些函数可以放在用户的 的.bashrc 文件中。
我们的 系统信息页面 程序变得越来越复杂和复杂。 这是一个完整的列表,突出显示了最近的更改:
#!/斌/庆典
# sys_info_page: 输出系统信息页的程序
PROGNAME=$(基本名称 $0)
TITLE="$HOSTNAME 的系统信息报告" CURRENT_TIME=$(date +"%x %r %Z")
TIMESTAMP="由 $USER 生成 $CURRENT_TIME"
report_uptime () { cat <<- _EOF_
系统正常运行时间
$(正常运行时间)
_EOF_返回
#!/斌/庆典
# sys_info_page: 输出系统信息页的程序
PROGNAME=$(基本名称 $0)
TITLE="$HOSTNAME 的系统信息报告" CURRENT_TIME=$(date +"%x %r %Z")
TIMESTAMP="由 $USER 生成 $CURRENT_TIME"
report_uptime () { cat <<- _EOF_
系统正常运行时间
$(正常运行时间)
_EOF_返回
}
report_disk_space () { cat <<- _EOF_
磁盘空间利用率
$(df -h)
_EOF_返回
}
报告家空间(){
如果 [[ $(id -u) -eq 0 ]]; 然后猫 <<- _EOF_
家庭空间利用率(所有用户)
$(du -sh /home/*)
_EOF_
其他
猫<<- _EOF_
家庭空间利用率 ($USER)
$(du -sh $HOME)
_EOF_
返回
}
用法 () {
echo "$PROGNAME: 用法:$PROGNAME [-f 文件 | -i]" 返回
}
write_html_page () { cat <<- _EOF_
$TITLE
$TITLE
$时间戳
$(报告正常运行时间)
$(report_disk_space)
$(report_home_space)
_EOF_返回
}
# 处理命令行选项
}
report_disk_space () { cat <<- _EOF_
磁盘空间利用率
$(df -h)
_EOF_返回
}
报告家空间(){
如果 [[ $(id -u) -eq 0 ]]; 然后猫 <<- _EOF_
家庭空间利用率(所有用户)
$(du -sh /home/*)
_EOF_
其他
猫<<- _EOF_
家庭空间利用率 ($USER)
$(du -sh $HOME)
_EOF_
返回
}
用法 () {
echo "$PROGNAME: 用法:$PROGNAME [-f 文件 | -i]" 返回
}
write_html_page () { cat <<- _EOF_
$TITLE
$TITLE
$时间戳
$(报告正常运行时间)
$(report_disk_space)
$(report_home_space)
_EOF_返回
}
# 处理命令行选项
总结
互动=
文件名=
而 [[ -n $1 ]]; do case $1 in
-f | - 文件)
转移
文件名=$1
;;
互动=
文件名=
而 [[ -n $1 ]]; do case $1 in
-f | - 文件)
-i | --interactive) 交互=1
;;
-h | --help) 用法退出
;;
*) 用法 >&2
退出1
;;
esac 移位
完成
#交互模式
如果 [[ -n $interactive ]]; 然后虽然为真; 做
read -p "输入输出文件名:" filename if [[ -e $filename ]]; 然后
read -p "'$filename' 存在。覆盖?[y/n/q] > " case $REPLY in
Y|y) 休息
;;
Q|q) echo "程序终止。" 出口
;;
*) 继续
;;
ESAC
elif [[ -z $文件名]]; 然后继续
其他
打破
fi
完成
fi
# 输出html页面
如果 [[ -n $filename ]]; 然后
如果触摸 $filename && [[ -f $filename ]]; 然后 write_html_page > $filename
其他
-i | --interactive) 交互=1
;;
-h | --help) 用法退出
;;
*) 用法 >&2
退出1
;;
esac 移位
完成
#交互模式
如果 [[ -n $interactive ]]; 然后虽然为真; 做
read -p "输入输出文件名:" filename if [[ -e $filename ]]; 然后
read -p "'$filename' 存在。覆盖?[y/n/q] > " case $REPLY in
Y|y) 休息
;;
Q|q) echo "程序终止。" 出口
;;
*) 继续
;;
ESAC
elif [[ -z $文件名]]; 然后继续
其他
打破
fi
完成
fi
# 输出html页面
如果 [[ -n $filename ]]; 然后
如果触摸 $filename && [[ -f $filename ]]; 然后 write_html_page > $filename
其他
echo "$PROGNAME: 无法写入文件 '$filename'" >&2 exit 1
其他
写_html_页面
fi
echo "$PROGNAME: 无法写入文件 '$filename'" >&2 exit 1
其他
写_html_页面
fi
我们还没有完成。 我们还有更多的事情可以做,我们可以做更多的改进。