运维Shell牛刀小试(十一):for循环读取多个命令行参数|read重定向读取文件内容


运维Shell脚本小试牛刀(一)

运维Shell脚本小试牛刀(二)

运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解

运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客

Cenos7安装小火车程序动画

运维Shell脚本小试牛刀(五):until循环

运维Shell脚本小试牛刀(六): Shell中的函数认知

运维Shell脚本小试牛刀(七):从函数文件中调用另外一个脚本文件中函数

运维Shell脚本小试牛刀(八): case模式忽略命令行参数大小写演示

运维Shell脚本牛刀小试(九): 重定向操作符“>“及双重定向“>>“

 运维Shell脚本小试牛刀(十)

运维Shell牛刀小试(十一):for循环读取多个命令行参数

运维Shell脚本小试牛刀(十二):awk编程尝鲜 


一: for循环来接收命令行参数,进行分叉处理不同的逻辑 

当有n个命令行参数数,处理使用shift命令读取命令行参数进行分叉处理外,通常还可以使用for循环与特殊参数$*|$@读取命令行参数进行相关的分支逻辑处理


[root@www standandinout]# cat forreadparameter.sh 
#!/bin/bash -
#==================================================================================================================
#
#
#                           FILE:  forreadparameter.sh
#                           USAGE: ./forreadparameter.sh
#    DESCRIPTION: for循环读取命令行参数
#        OPTIONS: ------------------------------------------------------------------------------------------
#        REQUIREMENTS: -------------------------------------------------------------------------------------

#        BUGS: ---------------------------------------------------------------------------------------------
#        NOTES: -------------------------------------------------------------------------------------------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: ------------------------------------------------------------------------------------------
#
#
#
#
#
#====================================================================================================================
# 定义变量E_quit_signal
e_quit_signal=68

#如果特殊变量的$1的值为空,则打印脚本的使用方法,并以退出状态码68退出脚本

if [ ! -n $1 ]
then
 

   # 打印脚本的使用方法到标准输出
   echo "Usage: `basename $0`  argument1 argument2 ........................................."

   # 退出脚本,退出状态码为68
   exit ${e_quit_signal}
fi

# 定义变量index
index=1
# 打印双引号中的内容到标准输出
echo "Listing args with \$*:"

# 使用for
for arg in $*
do

   # 打印输出变量index和arg的值及相应的内容到标准输出
   echo "Arg #$index = $arg......"

   # 将变量index的值加1
   let index+=1
done
echo
 # 重新将变量的值赋值为1
index=1

#打印双引号中的内容到标准输出
echo "Listing args with \"\$@\":"

# 使用for循环遍历特殊变量$@的值
for arg in "$@"
do

  # 打印输出变量index和arg的值及相应内容到标准输出 
  echo "Arg #$index = $arg"
  #将变量index的值加1
  let index+=1
done
 

二: 脚本测试 



[root@www standandinout]# ./forreadparameter.sh one two three four five six seven eight night ten
Listing args with $*:
Arg #1 = one......
Arg #2 = two......
Arg #3 = three......
Arg #4 = four......
Arg #5 = five......
Arg #6 = six......
Arg #7 = seven......
Arg #8 = eight......
Arg #9 = night......
Arg #10 = ten......

Listing args with "$@":
Arg #1 = one
Arg #2 = two
Arg #3 = three
Arg #4 = four
Arg #5 = five
Arg #6 = six
Arg #7 = seven
Arg #8 = eight
Arg #9 = night
Arg #10 = ten
 


三: read命令重定向读取文本文件的内容


[root@www standandinout]# cat readtwolines.sh 
#!/bin/bash -
#==================================================================================================================
#
#
#                           FILE:  readtwolines.sh
#                           USAGE: ./readtwolines.sh
#    DESCRIPTION: 从文件输入,从文件中重定向读取文件的内容 
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
# 如果参数的数量不为一个,则执行if结构中的语句块
if [ $# -ne 1 ];then
    #打印脚本文件的使用方法
    echo "Usage: $0 FILEPATH"

    # 退出
    exit
fi

# 定义一个变量file,并将脚本命令行第一个参数赋值给file
file=$1

# 定义一段代码块
{
  # 读取文件的一行内容,并将读取的内容存入变量line1中
  read line1
  # 读取文件的一行内容,并将读取的内容存入变量line2中
  read line2

  # 将代码块的标准输入执行file代表的文件,代码块读取的数据源来自文件file
} < $file

  # 打印变量file的值和一些信息
  echo " First line in ${file} is : "
  # 打印读取到的内容
  echo "$line1"
  
  # 打印变量file的值和一些信息
  echo " Sencond line in ${file} is : "
  # 打印读取到的内容
  echo "$line2"

# 退出脚本,且退出状态码为0
  exit 0
 
 


四: 测试代码块读取文件的内容

[root@www standandinout]# cat data.db 
Shell 重定向从标准的键盘指向从标准的文件读取数据
read命令从标准的文件一次只能读取一行命令,测试重定向是否成功
Shell默认从标准的输入设备键盘读取输入数据源

[root@www standandinout]# ./readtwolines.sh ./data.db 
 First line in ./data.db is : 
Shell 重定向从标准的键盘指向从标准的文件读取数据
 Sencond line in ./data.db is : 
read命令从标准的文件一次只能读取一行命令,测试重定向是否成功
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java运维shell脚本一般使用Bash或者其他Shell语言来编写,主要是为了方便运维人员进行一些自动化操作,比如部署、备份、启动和停止等。下面给出一个Spring Boot项目的运维脚本示例: ```bash #!/bin/bash # 定义一些变量 APP_NAME="my-application" APP_HOME="/opt/${APP_NAME}" APP_JAR="${APP_HOME}/${APP_NAME}.jar" PID_FILE="${APP_HOME}/${APP_NAME}.pid" LOG_FILE="${APP_HOME}/${APP_NAME}.log" # 检查应用是否已经启动,如果已经启动则退出 if [ -f "${PID_FILE}" ]; then pid=$(cat "${PID_FILE}") if ps -p "${pid}" > /dev/null; then echo "${APP_NAME} is already running with PID ${pid}." exit 1; fi fi # 启动应用 nohup java -jar "${APP_JAR}" > "${LOG_FILE}" 2>&1 & pid=$! echo "${pid}" > "${PID_FILE}" echo "Started ${APP_NAME} with PID ${pid}." # 停止应用 function stop() { if [ -f "${PID_FILE}" ]; then pid=$(cat "${PID_FILE}") kill -TERM "${pid}" rm "${PID_FILE}" echo "Stopped ${APP_NAME} with PID ${pid}." else echo "${APP_NAME} is not running." fi } # 其他操作,比如备份、部署等 function backup() { # TODO: 备份操作 } function deploy() { # TODO: 部署操作 } # 根据传入的参数执行不同的操作 case "$1" in start) # 启动应用 ;; stop) # 停止应用 stop ;; restart) # 重启应用 stop sleep 5 start ;; backup) # 备份应用 backup ;; deploy) # 部署应用 deploy ;; *) echo "Usage: $0 {start|stop|restart|backup|deploy}" exit 1 esac ``` 这个脚本定义了一些变量,比如应用名称、应用目录、应用Jar包、PID文件和日志文件等。然后定义了一个`stop`函数用来停止应用,以及其他操作如备份和部署等。最后使用`case`语句来根据传入的参数执行不同的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值