Shell脚本参数获取的两种方式

这篇具有很好参考价值的文章主要介绍了Shell脚本参数获取的两种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Shell 参数获取的两种方式

方式一

示例

新建一个test.sh文件

#!/bin/bash
echo "shell 名称 = $0"
echo "参数1 = $1"
echo "参数2 = $2"
echo "参数3 = $3"
echo "参数4 = $4"
echo "参数5 = $5"

执行脚本 : sh test.sh 5 6 3 6 2

  • 输出的结果:

  • shell 名称 = test.sh
    参数1 = 5
    参数2 = 6
    参数3 = 3
    参数4 = 6
    参数5 = 2
    
  • 使用该方式有两点需要注意的地方:“$0” 表示的是脚本名称本身

    • 优点 : 获取参数方便、简洁
    • 缺点 :必须按照指定的顺序输入参数,中间不能漏参数。否则参数将会产生错乱。

方式二 使用 getopts 方式获取

  • 如果需要实现类似 job_3.sh -f -d 指定参数值的方式,则推荐使用此种方式。
    使用该方式需要使用到Shell内置的函数"getopts"。
    在使用之前你需要知道一下几个内置参数的意义:
    1.optstring option :字符串,当中为参数选项,会逐个匹配。
    2.varname :每次匹配成功的选项
    3.arg :参数值
    4.$OPTIND :option index,会逐个递增,初始值为1
    5.$OPTARG :option argument,不同情况下会有不同的值

该函数的具体使用方式 : getopts [option[:]] VARIABLE
参数说明:

  • [option[:]] 表示参数,以"?️b:c:"的方式设置
    #####注意细节:
  1. 以":"开头时:getopts不会提示错误信息,会区分invalid option错误和miss option argument,两种错误的值不一样。invalid option错误时,VARIABLE会被设为*?。为出问题的option。miss option argument时,VARIABLE会被设为*。$OPTARG为出问题的option。
  2. 不以":"开头时:getopts会提示错误信息。会根据invalid option错误和miss option argument。提示两种不同的错误。VARIABLE都会被设为?。$OPTARG都为空。
  3. 如果option后面跟了":"表示该option可以接收参数,参数(argument)会被放在$OPTARG中。

示例getopt.sh

#!/bin/bash

while getopts ":a:p:n:s:" opt
do
    case $opt in
        n)
            echo "$OPTARG"
        ;;
        s)
            echo "$OPTARG"
        ;;
        a)
            echo "$OPTARG"
        ;;
        p)
            echo "$OPTARG"
        ;;
        *)
            echo "未知参数$opt"
            echo "参数值$OPTARG"
        ;;
        ?)
            echo "未知参数$opt"
            echo "参数值$OPTARG"
        ;;
    esac
done
  • 执行:sh getopt.sh -a 12 -p 32 -s string -n 你好 -r 世界

  • 输出:

12
32
string
你好
install.sh: 非法选项 -- r
未知参数?
参数值

可选参数示例

  • 脚本可以传1到多个参数该如何处理?如下面例子:
#!/bin/bash
readonly CURR=$(readlink -m $(dirname $0))
#
path=`sed -n '/^\[path/{:a1;n;/^$/q;p;ba1}' $CURR/../conf/extract_config | sed 's/[ \t]//g' `
file=` sed -n '/^\[file/{:a1;n;/^$/q;p;ba1}' $CURR/../conf/extract_config | sed 's/[ \t]//g' `
date='date -d yesterday + '%Y%m%d'`
#/cib/etl_job
app_path=` sed -n '/^\[app_path/{:a1;n;/^$/q;p;ba1}' $CURR/../conf/extract_config | sed 's/[ \t]//g' `
today=`date + %Y%m%d`

show_usage=" args:[ -p,-f,-d,-h] [--path, --file, --date, --help]"
GETOPT_ARGS=`getopt -o p:f:d:h -al path:file:date:qhlep --"$@"eval set -- "$GETOPT_ARGS"
while [ -n "$1" ]
do
   case "$1" in
      -p|--path) test -z $2 || path=$2; shift 2;;
      -f|--file)    test -z $2 || file=$2; shift 2;;
      -d|--date) test -z $2 || date=$2; shift 2;;
     -h|--help)cat  $CURR/../conf/readme1 && exit 0; shift 2;;
--) break;;
*) echo $1 , $2; shift 1;;
esac
done

这段Shell代码是一个使用getopt解析命令行参数的示例。

代码解释如下:

  1. GETOPT_ARGS=$(getopt -o p:f:d:h -al path:file:date:help -- "$@")

    • 使用getopt命令解析命令行参数,并将结果保存到GETOPT_ARGS变量中。
    • -o后面跟短选项,例如p:f:d:h表示短选项为-p-f-d-h
    • -l后面跟长选项,例如path:file:date:help表示长选项为--path--file--date--help
    • --表示选项结束,之后的参数将被视为位置参数。
    • "$@"表示将脚本接收到的所有参数传递给getopt命令。
  2. eval set -- "$GETOPT_ARGS"

    • GETOPT_ARGS的值设置为新的参数列表,相当于重置了脚本中的位置参数。这样,后续的$1$2等就可以用于处理解析后的命令行参数。
  3. while [ -n "$1" ]

    • 这是一个循环语句,用于逐个处理命令行参数,直到所有参数都被处理完毕。
  4. case "$1" in ... esac

    • 这是一个条件判断语句,根据当前参数的值执行相应的操作。
  5. -p | --path) test -z $2 || path=$2; shift 2;;

    • 当参数是-p--path时,将下一个参数(即$2)赋值给path变量,并通过shift 2将已处理的两个位置参数移除。
  6. -f | --file) test -z $2 || file=$2; shift 2;;

    • 当参数是-f--file时,将下一个参数(即$2)赋值给file变量,并通过shift 2将已处理的两个位置参数移除。
  7. -d | --date) test -z $2 || date=$2; shift 2;;

    • 当参数是-d--date时,将下一个参数(即$2)赋值给date变量,并通过shift 2将已处理的两个位置参数移除。
  8. -h | --help) cat $CURR/../conf/readme1 && exit 0; shift 2;;

    • 当参数是-h--help时,打印readme1文件的内容并退出脚本。
  9. --) break;;

    • 当遇到--标记时,停止循环。
  10. *) echo $1 , $2; shift 1;;

    • 对于其他未匹配的参数,打印参数的值,并通过shift 1将已处理的一个位置参数移除。

通过以上步骤,脚本会逐个处理命令行参数,并根据参数的类型进行相应的操作。可以根据实际需求修改每个选项的处理逻辑和操作。


file=sed -n '/^\[file/{:a1;n;/^$/q;p;ba1}' $CURR/../conf/extract_config | sed 's/[ \t]//g' 这个命令什么含义?
这个命令的含义是从指定文件中提取包含[file开头的行,并将其保存到变量file中。下面是对该命令的解释:

  1. sed -n '/^\[file/{:a1;n;/^$/q;p;ba1}' $CURR/../conf/extract_config:这部分命令使用sed工具从文件$CURR/../conf/extract_config中提取特定的行。

    • sed -n:关闭默认输出,并使用静默模式。
    • /^\[file/:匹配以[file开头的行。
    • :a1:定义一个标签a1,用于后续跳转。
    • n:读取下一行。
    • /^$/q:如果读取的行是空行,则退出命令执行。
    • p:打印满足条件的行。
    • ba1:跳转到标签a1,实现循环。
  2. sed 's/[ \t]//g':这部分命令使用sed工具删除变量file中的空格和制表符。

    • s/[ \t]//g:将空格和制表符替换为空字符,并应用于整个字符串。

最终,通过这个命令,将文件$CURR/../conf/extract_config中以[file开头的行提取出来,并存储到变量file中。然后对变量file中的空格和制表符进行删除操作。

二、Shell脚本之shift用法

shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本)。

示例1:

依次读取输入的参数并打印参数个数:

  • run.sh

    • #!/bin/bash
      
      while [ $# != 0 ];do
      
      echo "第一个参数为:$1,参数个数为:$#"
      
      shift
      
      done
      
  • 输入如下命令运行:run.sh a b c d e f

  • 结果显示如下:

  • 第一个参数为:a,参数个数为:6
    
    第一个参数为:b,参数个数为:5
    
    第一个参数为:c,参数个数为:4
    
    第一个参数为:d,参数个数为:3
    
    第一个参数为:e,参数个数为:2
    
    第一个参数为:f,参数个数为:1
    
  • 从上可知 shift(shift 1) 命令每执行一次,变量的个数($#)减一(之前的$1变量被销毁,之后的$2就变成了$1),而变量值提前一位。

    同理,shift n后,前n位参数都会被销毁,比如:

    • 输入5个参数: abcd e

那么$1=a,$2=b,$3=c,$4=d,$5=e,执行shift 3操作后,前3个参数a、b、c被销毁,就剩下了2个参数:d,e(这时d=$1,e=$2,其中d由$4—>$1,e由$5—>$2),参考示例如下:

示例2:
#!/bin/bash

echo "参数个数为:$#,其中:"

for i in $(seq 1 $#)

do

eval j=\$$i

echo "第$i个参数($"$i"):$j"

done

shift 3

echo "执行shift 3操作后:"

echo "参数个数为:$#,其中:"

for i in $(seq 1 $#)

do

通过eval把i变量的值($i)作为变量j的名字

eval j=\$$i

echo "第$i个参数($"$i"):$j"

done

输出结果为:文章来源地址https://www.toymoban.com/news/detail-525114.html

参数个数为:5,其中:

第1个参数($1):a

第2个参数($2):b

第3个参数($3):c

第4个参数($4):d

第5个参数($5):e

执行shift 3操作后:

参数个数为:2,其中:

第1个参数($1):d

第2个参数($2):e

三、调度作业shell脚本示例

#!/bin/bash
readonly CURR=$(readlink -m $(dirname $0))
#
path=`sed -n '/^\[path/{:a1;n;/^$/q;p;ba1}' $CURR/../conf/extract_config | sed 's/[ \t]//g' `
file=` sed -n '/^\[file/{:a1;n;/^$/q;p;ba1}' $CURR/../conf/extract_config | sed 's/[ \t]//g' `
date='date -d yesterday + '%Y%m%d'`
#/cib/etl_job
app_path=` sed -n '/^\[app_path/{:a1;n;/^$/q;p;ba1}' $CURR/../conf/extract_config | sed 's/[ \t]//g' `
today=`date + %Y%m%d`
mark=$1
show_usage="args: [-p, -f, -d, -h] [--path, --file, --date, --help]"
GETOPT_ARGS=`getopt -o p:f:d:h -al path:file:date:help -- "$@"`
eval set -- "$GETOPT_ARGS"
while [ -n "$1" ]
do
 case "$1" in
  -p|--path) test -z $2 || path=$2 shift 2;;
  -f|--file) test -z $2 || path=$2 shift 2;;
  -d|--date) test -z $2 || path=$2 shift 2;;
  -h|--help) cat $CURR/../conf/readme1 && exit 0; shift 2;;
  --) break;
  *) echo $1,$2;shift 1;;
  esac
done

# 日志格式
log_path="/ciblog/etl_job/$date"
flg_bak_path='/cib/etl_job/flg_bak'
flg_path='/cib/etl_job/flg'
data_path='/sftp/data'
now_date=`date -d now + "%Y%m%d%"`
> $log_path/$file"_"$date.log
echo "**********************作业1执行日志*******************" >> $log_path/$file"_"$date.log
echo "" >>$log_path/$file"_"$date.log
echo "作业1开始执行..." >>$log_path/$file"_"$date.log
echo "文件名称:$file"  >>$log_path/$file"_"$date.log
echo "文件日期:$date"  >>$log_path/$file"_"$date.log
echo "执行日期:$now_date"  >>$log_path/$file"_"$date.log

#应付模块

#连接数据库参数
#用户名
user="cap4j"
#密码
pass = cat $app_path/bin/passwd

function decrypt_passwd{
 tmp_pass=$1
 password=`echo $tmp_pass|base64 -d`
 
}
decrypt_passwd $pass

# ip
#host="16.7.xx.xx"
host="10.7.48.232"
#库名
db_name="etl_job"
#sql语句:查询当前文件,指定日期的数据状态
sql1="select final_status from all_table where table_name='$file' and data_time='$date'; "

# 执行sql语句
data_status=`mysql -h "$host" -u "$user" -p "$password" -D"$db_name" -s -e "$sql1" `
#echo "data_status ==> " $data_status

#打印日志
if  [ $? -eq 0 ];then
  echo "文件状态查询成功!" >>$log_path/$file"_"$date.log
  echo "文件状态查询成功: $data_status " 
else
  echo "文件状态查询失败!" >>$log_path/$file"_"$date.log
  exit 1
fi

# 根据数据状态执行不同的逻辑
if [ "$data_status" -eq 1 ]
	# 说明当下日期的文件,已经跑过了,这个是要重跑
	then
	  #执行重跑逻辑
	  echo "$file 文件 $date 号的状态为1,执行的是重跑任务!" >> $log_path/$file"_"$date.log
	  #重新复制一份flg文件
	case ${mark} in
	  "y"){
	  echo "$file 特殊文件,特殊处理!"
	  echo "生成新的${data_path}/"$file"."$date".000000.0000.flg文件"
	  /bin/cp -rf ${flg_path}/"file".flg  ${data_path}/$file"."$date".000000.0000.flg
	  };;
	esac

	# 删除之前跑过的痕迹
	rm -rf $path/gzip/"$file"."$date".000000.0000.data

	#rm -rf $path/gzip/"$file"."$date".000000.0000.data
	#rm -rf $path/gzip/"$file"."$date".000000.0000.flg

	#打印日志
	if [ $? -eq 0 ];then
	   echo "原来的过程文件删除成功!" >> $log_path/$file"_"$date.log
	else
	   echo "原来的过程文件删除失败!" >> $log_path/$file"_"$date.log
	   exit 1
	fi
	# 执行当前作业
	etl_extract(){
	 # "获取字符串下标..." >> $log_path/$file"_"$date.log
	 sleep 1
	 #echo $date
	  #echo $path
	 echo $file
	 bool=`ls $path | grep "$file.$date" | wc -l `
	 if [ $bool == 0 ];then
	  echo "没有数据文件!"
	  exit 1
	 fi

	# 解压到指定路径
	gzip -cd $path/"$file"."$date".000000.0000.dat.gz > $path/gzip/"$file"."$date".000000.0000.dat
	# 将解压出来的文件进行替换
	sed -i 's/|/ /g' $path/gzip/"$file"."$date".000000.0000.dat

	#打印日志
	if [ $? -eq 0 ];then
	   echo "文件解压成功!" >>$log_path/$file"_"$date.log
	   echo "文件解压成功!"
	 else
	   echo "文件解压失败!" >>$log_path/$file"_"$date.log
	   echo "文件解压失败!"
	   exit 1
	fi

	# 转码
		# iconv -f iso-8859-1 -t UTF-8 $path/../gzip/"$file"."$i".000000.0000.dat -o $path/../transcoding/"$file"."$i".000000.0000.dat
		# iconv -f gb2312 -t UTF-8 $path/../gzip/"$file"."$i".000000.0000.dat -o $path/../transcoding/"$file"."$i".000000.0000.dat
		# 打印日志
		# esle
			# echo ""$file"."$i"文件转码失败!" >> $log_path/$file"_"$date.log
			#exit 1
		#fi
		# mv $path/../transcoding/"$file"."$i".000000.0000.dat  $path/../data/"$file"."$i".000000.0000.dat
		# cp $path/"$file"."$i".000000.0000.flg  $path/../data/"$file"."$i".000000.0000.flg

	}

	echo "============================执行时间:[ `date` ]============================" >> $log_path/$file"_"$date.log
	etl_extract
	echo "" >> $log_path/$file"_"$date.log
	echo "============================结束时间:[ `date` ]============================" >> $log_path/$file"_"$date.log
	echo "" >> $log_path/$file"_"$date.log
else 
	  # 没有跑过,是跑批逻辑
	  echo "$file 文件 $date 号的状态为0,执行的是跑批任务!" >> $log_path/$file"_"$date.log
	  # 查找这个文件所有状态为0的日期
	  echo "正在查找 $file 文件所有的数据状态...." >> $log_path/$file"_"$date.log
	  # 从etl_job库中查询all_table表中该文件的数据最终状态为零的所有日期
	  sql2="select data_time from all_table where table_name='$file' and final_status=0 order by data_time;"
	  #执行sql语句
	  sql2_result=`mysql -h "$host" -u "$user" -p "$password" -D"$db_name" -s -e "$sql2" `
	  echo "$sql2_result" >> $log_path/$file"_"$date.log
	  echo "$file 文件有以上时间的数据没有处理!"  >>$log_path/$file"_"$date.log
	  data_file=`ls $path`   
	  # 将能够执行的文件日期置空
	  > $app_path/date/$date/date/"$file".txt
	 for i in $sql2_result
	 do
		  a=0
		  for j in $data_file
			  do 
			   if [ "$file"."$i".000000.0000.flg = "$j" ] 
			   then
				a =1
				echo "$i 号的数据可以跑!" >> $log_path/$file"_"$date.log
				echo "$i 号的数据可以跑!"
				echo "$i" >> $app_path/date/$date/date/"$file".txt
			   fi
			  done
		 if [ $a -eq 0 ] 
		 then
		 echo "$i 号的数据没到!" >> $log_path/$file"_"$date.log
		 echo "$i 号的数据没到!"
		 fi 
	done

	# 判断有没有可执行的日期
	 numbers =`cat $app_path/date/"$date"/date/"$file".txt | wc -l `
	 if [ $numbers -eq 0 ]
	 then
	  echo "没有可以执行的数据" >> $log_path/$file"_"$date.log
	  exit 1
	 else
	   date_num=`cat  $app_path/date/"$date"/date/"$file".txt ` 
	   for i in $date_num
	   do
		case ${mask} in
		"y"){
		echo "特殊文件,特殊处理!"
		# 判断flg文件有没有备份过
		if [ ! -f "${flg_bak_path}/${file}.${i}.000000.0000.flg" ];then
		 #没有当前flg,则将/sftp/data/"$file.$i.000000.0000.flg 移动到/cib/etl_job/flg_bak"
		 echo "${flg_bak_path}/${file}.${i}.000000.0000.flg 正在备份..."
		 mv ${data_path}/${file}.${i}.000000.0000.flg ${flg_bak_path}
		 if [ $? -eq 0 ];then
		  echo "${file}.${date}.000000.0000.flg 文件备份成功!"
		 else
		  echo "${file}.${date}.000000.0000.flg 文件备份失败!"
		  exit 1
		 fi
		else
		 echo "${flg_bak_path}/${file}.${i}.000000.0000.flg存在,不需要备份!"	
		fi
		# 复制新的flg文件
		echo "生成新的"$file"."$i".000000.0000.flg文件!" 
		/bin/cp -rf ${flg_path}/"file".flg  ${data_path}/$file"."$i".000000.0000.flg
		};;
		esca
	   # 删除之前跑过的痕迹
	   rm -rf  $path/gzip/"$file"."$i".000000.0000.data
	   
	   #
	   if [ $? -eq 0 ];then
		 echo "初始化成功!" >> $log_path/$file"_"$date.log
	   else
		 echo "初始化失败!" >> $log_path/$file"_"$date.log 
		 exit 1
	   fi
	   etl_extract(){
		 bool=` ls $path | grep "$file.$i" | grep wc -l `
		 if [ $bool == 0 ];then
		   echo "没有数据文件!"
		   exit 1
		 fi
		 
		# 解压到指定路径
		gzip -cd  $path/"$file"."$i".000000.0000.dat.gz > $path/gzip/"$file"."$i".000000.0000.dat	
		# 将解压出来的文件进行替换
		sed -i 's/|/ /g' $path/gzip/"$file"."$i".000000.0000.dat
		# 打印日志
		if [ $? -eq 0 ];then
			echo ""$file"."$i"文件解压成功!" >> $log_path/$file"_"$date.log
		else
			echo ""$file"."$i"文件解压失败!" >> $log_path/$file"_"$date.log
			exit 1
		fi
		
		#转码
		# iconv -f iso-8859-1 -t UTF-8 $path/../gzip/"$file"."$i".000000.0000.dat -o $path/../transcoding/"$file"."$i".000000.0000.dat
		# iconv -f gb2312 -t UTF-8 $path/../gzip/"$file"."$i".000000.0000.dat -o $path/../transcoding/"$file"."$i".000000.0000.dat
		# 打印日志
		# esle
			# echo ""$file"."$i"文件转码失败!" >> $log_path/$file"_"$date.log
			#exit 1
		#fi
		# mv $path/../transcoding/"$file"."$i".000000.0000.dat  $path/../data/"$file"."$i".000000.0000.dat
		# cp $path/"$file"."$i".000000.0000.flg  $path/../data/"$file"."$i".000000.0000.flg
		
	   }
	   echo "============================执行时间:[ `date` ]============================" >> $log_path/$file"_"$date.log
		etl_extract
	   echo "" >> $log_path/$file"_"$date.log
	   echo "============================结束时间:[ `date` ]============================" >> $log_path/$file"_"$date.log
	   echo "" >> $log_path/$file"_"$date.log
	  done
	 fi
fi

到了这里,关于Shell脚本参数获取的两种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】Shell脚本中获取命令运行的结果

    写shell脚本的时候,常需要将一个命令的运行结果做为参数传递给另外一个命令,除了我们熟知的管道 | 和args,我们也可以通过获取命令的运行结果。 执行结果: 来点复杂的应用: 再比如: 😉 运行结果: 把反引号``换成$()即可 反引号不支持嵌套,而 $ 支持嵌套。 举个例

    2024年02月11日
    浏览(40)
  • Shell脚本中获取本机ip地址,Linux获取本地ip地址

    在 Shell 脚本中获取本机 IP 地址可以通过多种方式实现,这里介绍三种常用的方法: 1. 使用 ifconfig 命令获取本机 IP 地址 ifconfig 命令可以获取本机网卡的配置信息,包括 IP 地址。可以通过 grep 命令过滤出 IP 地址信息,再使用 awk 命令提取出具体的 IP 地址。示例代码如下:

    2024年02月11日
    浏览(57)
  • linux获取内存与cpu使用率(附有C语言源码与shell脚本)

    linux内核提供了一种通过/proc文件系统来在运行时访问内核内部数据结构,改变内核设置的机制,各种硬件平台上的linux系统的/proc文件系统的基本概念都是相同的。 /proc文件系统是一种内核和内核模块用来向进程发送信息的机制。这个伪文件系统可以和内核内部的数据结构进

    2024年02月06日
    浏览(46)
  • 【Shell脚本4】Shell 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径): 为脚本设置

    2024年02月05日
    浏览(40)
  • 快速获取cookie的两种方式

    在需要获取Cookie的谷歌浏览器界面,按Ctrl+Shift+j打开js控制台。 输入 console.log(document.cookie) 回车打印Cookies 新建书签,书签名称随意,书签的网址是以下网址: 在需要获取Cookie的页面,点击这个小书签,就直接复制好了Cookie了。 以上两种方式是自用实测比较方便高效的,在此

    2024年02月11日
    浏览(54)
  • 线程方法接收参数和返回参数,Java的两种线程实现方式对比

    总所周知,Java实现多线程有两种方式,分别是继承Thread类和实现Runable接口,那么它们的区别是什么? 继承 Thread 类: 通过继承 Thread 类,你可以创建一个直接表示线程的类。你可以覆盖 Thread 类中的 run 方法来定义线程的逻辑。当调用 start 方法启动线程时,会执行该类中的

    2024年02月11日
    浏览(45)
  • Java 获取小程序码的两种方式

    目前小程序推出了自己的识别码,小程序码, 圆形的码看起来比二维码好看。 本文总结微信小程序的获取小程序二维码的接口开发。官方地址 主要内容摘抄自微信小程序的API文档,java接口开发是自己总结开发。 通过后台接口可以获取小程序任意页面的二维码,扫描该二维

    2024年02月14日
    浏览(38)
  • shell脚本使用(宿主机windows-服务器-centos)--用于使用shell脚本方式控制docker容器

    需求: 我想要使得windows上编写shell脚本,并且在这个shell脚本在linux中也可用 shell脚本在windows上无法直接运行,但是有WSL这个linux子系统的工具 可以使得shell脚本在主机上执行 视频讲解连接 方式1 方式2

    2024年02月07日
    浏览(50)
  • 线程方法接收参数示例,Java的两种线程实现方式区别

    总所周知,Java实现多线程有两种方式,分别是继承Thread类和实现Runable接口,那么它们的区别是什么? 继承 Thread 类: 通过继承 Thread 类,你可以创建一个直接表示线程的类。你可以覆盖 Thread 类中的 run 方法来定义线程的逻辑。当调用 start 方法启动线程时,会执行该类中的

    2024年02月11日
    浏览(43)
  • Shell脚本中获取机器的日期和时间

    要在Shell脚本中获取机器的日期和时间,可以使用内置的date命令。以下是如何在Shell脚本中使用date命令来获取机器的日期和时间的示例: 在这个示例中,我们使用了date命令和格式化字符串来获取当前日期和时间。%Y代表年份,%m代表月份,%d代表日期,%H代表小时,%M代表分钟

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包