运维Shell脚本小试牛刀(一)
运维Shell脚本小试牛刀(二)
运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解
一: Shell中循环剖析 for 循环.......
#!/bin/bash -
#==================================================================================================================
#
#
# FILE: countloop.sh
# USAGE: ./countloop.sh
# DESCRIPTION:
# OPTIONS: -------
# REQUIREMENTS: ---------
#
# BUGS: ------
# NOTES: --------
# AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
# ORGANIZATION:
# CREATED: 2023-8-24 09:11:20
# REVISION: --------
#
#
#
#
#
#====================================================================================================================
for i in 1 2 3 4 5 6 #循环1~6
doecho "Thre for loop is run $i times."
done
echo "==============================================================================================================="for linux in Debian Redhat Suse Fedora Centos7 Ubunto
do
echo "current out system is ${linux}....."
done
echo "================================================================================================================"
#!/bin/bash -
#==================================================================================================================
#
#
# FILE: orcmdssub.sh
# USAGE: ./forcmdssub.sh
# DESCRIPTION:
# OPTIONS: -------
# REQUIREMENTS: ---------
#
# BUGS: ------
# NOTES: --------
# AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
# ORGANIZATION:
# CREATED: 2023-8-24 09:11:20
# REVISION: --------
#
#
#
#
#
#====================================================================================================================
echo "Printing file list in /etc directory........"
for file in `ls /etc/*`
doecho "current print file is: $file"
done
#!/bin/bash -
#==================================================================================================================
#
#
# FILE: forcmdssub.sh
# USAGE: ./forcmdssub.sh
# DESCRIPTION:
# OPTIONS: -------
# REQUIREMENTS: ---------
#
# BUGS: ------
# NOTES: --------
# AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
# ORGANIZATION:
# CREATED: 2023-8-24 09:11:20
# REVISION: --------
#
#
#
#
#
#====================================================================================================================
echo "Printing file list in /etc directory........"
for file in `ls /etc/*`
doecho "current print file is: $file"
done
[root@www shelldic]# cat forvarscoutents.sh
#!/bin/bash -
#==================================================================================================================
#
#
# FILE: forvarscoutents.sh
# USAGE: ./forvarscoutents.sh
# DESCRIPTION:
# OPTIONS: -------
# REQUIREMENTS: ---------
#
# BUGS: ------
# NOTES: --------
# AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
# ORGANIZATION:
# CREATED: 2023-8-24 09:11:20
# REVISION: --------
#
#
#
#
#
#====================================================================================================================filenames="/etc/my.cnf /etc/vconsole.conf /etc/rsyncd.conf /etc/sestatus.conf /usr/local/rs.conf"
# 上面的文件名以空格分割for file in $filenames
do
[ -f $file ] && echo "The file $file was found.." || echo "***** ERROR: The file $file was missing.....*******"
# 如果是文件,则打印文件存在,如果不存在则打印丢失
done
#!/bin/bash -
#==================================================================================================================
#
#
# FILE: simplenestedfor.sh
# USAGE: ./simplenestedfor.sh
# DESCRIPTION:
# OPTIONS: -------
# REQUIREMENTS: ---------
#
# BUGS: ------
# NOTES: --------
# AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
# ORGANIZATION:
# CREATED: 2023-8-24 09:11:20
# REVISION: --------
#
#
#
#
#
#====================================================================================================================
for (( i = 0; i < 30; i++ )) #外循环do
for (( j=0; j<160; j++ )) # 内循环
do
echo -n "* " #
doneecho "" #
done
二 : while循环
#!/bin/bash -
#==================================================================================================================
#
#
# FILE: whichreadfile.sh
# USAGE: ./whichreadfile.sh
# DESCRIPTION:
# OPTIONS: -------
# REQUIREMENTS: ---------
#
# BUGS: ------
# NOTES: --------
# AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
# ORGANIZATION:
# CREATED: 2023-8-24 09:11:20
# REVISION: --------
#
#
#
#
#
#====================================================================================================================file=$1 # 将位置参数1的值赋值给变量file
if [ $# -lt 1 ];then # 如果脚本未指定参数,则打印使用方法并退出运行
echo "Usage: $0 FILEPATH"
exitfi
while read -r line # 使用read命令从标准输入读取文件的一行,并赋值给变量line
do
echo $line # 打印读取的行
done < "$file"
[root@www shelldic]# cat whilereadfile.sh
#!/bin/bash -
#==================================================================================================================
#
#
# FILE: whichreadfile.sh
# USAGE: ./whichreadfile.sh
# DESCRIPTION:
# OPTIONS: -------
# REQUIREMENTS: ---------
#
# BUGS: ------
# NOTES: --------
# AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
# ORGANIZATION:
# CREATED: 2023-8-24 09:11:20
# REVISION: --------
#
#
#
#
#
#====================================================================================================================file=$1 # 将位置参数1的值赋值给变量file
if [ $# -lt 1 ];then # 如果脚本未指定参数,则打印使用方法并退出运行
echo "Usage: $0 FILEPATH"
exitfi
while read -r line # 使用read命令从标准输入读取文件的一行,并赋值给变量line
do
echo $line # 打印读取的行
done < "$file"
输出测试:
[root@www shelldic]# ./whilereadfile.sh /etc/sudo.conf
#
# Default /etc/sudo.conf file
#
# Format:
# Plugin plugin_name plugin_path plugin_options ...
# Path askpass /path/to/askpass
# Path noexec /path/to/sudo_noexec.so
# Debug sudo /var/log/sudo_debug all@warn
# Set disable_coredump true
#
# Sudo plugins:
#
# The plugin_path is relative to ${prefix}/libexec unless fully qualified.
# The plugin_name corresponds to a global symbol in the plugin
# that contains the plugin interface structure.
# The plugin_options are optional.
#
# The sudoers plugin is used by default if no Plugin lines are present.
Plugin sudoers_policy sudoers.so
Plugin sudoers_io sudoers.so#
# Sudo askpass:
#
# An askpass helper program may be specified to provide a graphical
# password prompt for "sudo -A" support. Sudo does not ship with its
# own passpass program but can use the OpenSSH askpass.
#
# Use the OpenSSH askpass
#Path askpass /usr/X11R6/bin/ssh-askpass
#
# Use the Gnome OpenSSH askpass
#Path askpass /usr/libexec/openssh/gnome-ssh-askpass#
# Sudo noexec:
#
# Path to a shared library containing dummy versions of the execv(),
# execve() and fexecve() library functions that just return an error.
# This is used to implement the "noexec" functionality on systems that
# support C<LD_PRELOAD> or its equivalent.
# The compiled-in value is usually sufficient and should only be changed
# if you rename or move the sudo_noexec.so file.
#
#Path noexec /usr/libexec/sudo_noexec.so#
# Core dumps:
#
# By default, sudo disables core dumps while it is executing (they
# are re-enabled for the command that is run).
# To aid in debugging sudo problems, you may wish to enable core
# dumps by setting "disable_coredump" to false.
#
# Set to false here so as not to interfere with /proc/sys/fs/suid_dumpable
#
Set disable_coredump false