首页 > 其他分享 >#渗透测试#SRC漏洞挖掘#网络运维# 黑客脚本编写03之脚本参数的传递和数学运算

#渗透测试#SRC漏洞挖掘#网络运维# 黑客脚本编写03之脚本参数的传递和数学运算

时间:2024-11-17 10:14:05浏览次数:3  
标签:脚本 SRC Shell 运算 运维 echo 传递 参数

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。                                                              #陇羽sec#

一、Shell脚本程序传递参数

在Shell脚本中,向脚本程序传递参数可以通过命令行参数的方式实现。以下是几种常见的方法:

方法一:

    位置参数:使用1,1,2, ..., 9来表示第1,第2,...,第9个参数,使用9来表示第1,第2,...,第9个参数,使用{10}, ${11}, ...来表示第10, 第11,...个参数。例如:

#!/bin/bash 
echo "第一个参数是: $1"
echo "第二个参数是: $2"

    特殊参数:使用#表示传递到脚本的参数个数,使用*表示以一个单字符串显示所有向脚本传递的参数变量,使用$$表示脚本运行的当前进程ID号,使用!表示后台运行的最后一个进程的进程ID号,使用!表示后台运行的最后一个进程的进程ID号,使用@表示与$#相同,但是使用时加引号,并在引号中返回每个参数。例如:

#!/bin/bash 
echo "传递到脚本的参数个数是: $#"
echo "所有参数作为一个字符串显示: $*"

    getopt和getopts:用于处理带有选项和参数的命令行参数。例如:

#!/bin/bash 
while getopts ":a:b:c" option 
do 
    case $option in 
        a)
            echo "选项-a的参数是: $OPTARG"
            ;;
        b)
            echo "选项-b的参数是: $OPTARG"
            ;;
        c)
            echo "选项-c没有参数"
            ;;
        *)
            echo "未知选项: $OPTARG"
            ;;
    esac 
done 
 方法二:
脚本内容如下:
echo 执行的文件名是: $0
echo 第一个参数是: $1
echo 传递的参数作为一个字符串显示:$*
echo 传递的参数独立作为每个字符串显示:$@
echo 传递的脚本的参数个数是:$#
echo 最后命令的退出状态:$?
echo 脚本运行的当前进程ID是:$$


脚本内容解释

以下是对脚本中各个命令及其输出的解释:
执行的文件名是: $0
$0 表示当前脚本的文件名。在这个例子中,脚本的文件名是 s.sh 。
第一个参数是: $1
$1 表示传递给脚本的第一个参数。在这个例子中,没有传递任何参数,所以 $1 为空。
传递的参数作为一个字符串显示:$*
$* 表示所有传递给脚本的参数作为一个字符串显示。在这个例子中,没有传递任何参数,所以 $* 为空。
传递的参数独立作为每个字符串显示:$@
$@ 表示所有传递给脚本的参数,每个参数独立显示。在这个例子中,没有传递任何参数,所以 $@ 为空。
传递的脚本的参数个数是:$#
$# 表示传递给脚本的参数个数。在这个例子中,没有传递任何参数,所以 $# 为 0。
最后命令的退出状态:$?
$? 表示最后一个命令的退出状态。在这个例子中,最后一个命令是 echo,它成功执行,所以 $? 为 0。
脚本运行的当前进程ID是:$$
$$ 表示当前脚本运行的进程ID。在这个例子中,脚本运行的进程ID是 5739。
总结
这个脚本展示了如何使用Bash脚本中的特殊变量来获取脚本文件名、参数、参数个数、退出状态和进程ID等信息。由于没有传递任何参数,所有与参数相关的变量都为空。


┌──(root㉿kali)-[~/Desktop]
└─# vim s.sh
                                                                                             
┌──(root㉿kali)-[~/Desktop]
└─# sh s.sh
执行的文件名是: s.sh
第一个参数是:
传递的参数作为一个字符串显示:
传递的参数独立作为每个字符串显示:
传递的脚本的参数个数是:0
最后命令的退出状态:0
脚本运行的当前进程ID是:5739
 示例三:
┌──(root㉿kali)-[~/Desktop]
└─# sh s.sh name 
执行的文件名是: s.sh
第一个参数是: name
传递的参数作为一个字符串显示:name
传递的参数独立作为每个字符串显示:name
传递的脚本的参数个数是:1
最后命令的退出状态:0
脚本运行的当前进程ID是:10049

脚本执行结果分析
执行的文件名
执行的文件名是: s.sh
传递的参数
第一个参数是: name
参数处理
传递的参数作为一个字符串显示:name 传递的参数独立作为每个字符串显示:name
参数个数
传递的脚本的参数个数是:1
退出状态
最后命令的退出状态:0
进程ID
脚本运行的当前进程ID是:10049
总结
从输出结果来看,脚本 s.sh 成功执行,并且接收了一个参数 name。脚本的退出状态为 0,表示执行成功。脚本运行的进程ID是 10049。
                               

脚本内容如下:
echo 执行的文件名是: $0
echo 第一个参数是: $1
echo 第二个参数是: $2
echo 第三个参数是: $3
echo 传递的参数作为一个字符串显示:$*
echo 传递的参数独立作为每个字符串显示:$@
echo 传递的脚本的参数个数是:$#
echo 最后命令的退出状态:$?
echo 脚本运行的当前进程ID是:$$

┌──(root㉿kali)-[~/Desktop]
└─# vim s.sh
                                                                                             
┌──(root㉿kali)-[~/Desktop]
└─# sh s.sh      
执行的文件名是: s.sh
第一个参数是:
第二个参数是:
第三个参数是:
传递的参数作为一个字符串显示:
传递的参数独立作为每个字符串显示:
传递的脚本的参数个数是:0
最后命令的退出状态:0
脚本运行的当前进程ID是:12785

因为$有递增关系

┌──(root㉿kali)-[~/Desktop]
└─# sh s.sh 1 2 3
执行的文件名是: s.sh
第一个参数是: 1
第二个参数是: 2
第三个参数是: 3
传递的参数作为一个字符串显示:1 2 3
传递的参数独立作为每个字符串显示:1 2 3
传递的脚本的参数个数是:3
最后命令的退出状态:0
脚本运行的当前进程ID是:13345


 总结: 参数传递一般为$n(n表示数字 可递增),$* 就是将参数当作统一的字符串显示出来,而$@是将每个字符串当作独立的字符串显示, 这也是$*和$@ 的区别,$#代表参数的个数,$?:表示最后执行的命令的退出状态。0表示成功,非0表示失败。这在脚本中用于检查命令是否成功执行。

二、Shell脚本参数传递的最佳实践

在Shell脚本中,参数传递是一个常见的任务。以下是一些最佳实践,可以帮助您更有效地传递和处理参数:

  1. 使用位置参数:对于少量参数,可以直接使用位置参数(1,1,2, ...)来传递和引用参数。这种方法简单直观,但对于大量参数来说,可能会变得混乱和难以管理。

  2. 使用特殊变量:对于一些特定的需求,可以使用Shell脚本中的特殊变量,如#(传递到脚本的参数个数)、*(以一个单字符串显示所有向脚本传递的参数变量)和@(与@(与#相同,但是使用时加引号,并在引号中返回每个参数)。这些变量可以帮助您更灵活地处理参数。

  3. 使用getopt和getopts:对于复杂的参数处理需求,可以使用getopt和getopts命令来解析和处理参数。这些命令可以帮助您处理带有选项和参数的命令行参数,使得参数处理更加规范和易于管理。

  4. 使用函数:如果您的脚本中有多个地方需要处理参数,可以考虑将参数处理逻辑封装到函数中。这样可以提高代码的复用性和可维护性。

  5. 使用配置文件:对于大量的参数,或者参数可能会频繁变化的情况,可以考虑将参数放在配置文件中,然后在脚本中读取配置文件。这样可以使得脚本更加简洁和易于维护。

  6. 使用全局变量:在脚本开始部分定义所有变量,然后在函数中直接使用这些全局变量。这种方法可以提高脚本的可读性和可维护性。

  7. 检查参数:在使用参数之前,应该检查参数是否存在,以及参数的类型和范围是否符合预期。这可以帮助您避免因为参数错误而导致的脚本失败。

  8. 使用引号:在引用参数时,应该使用引号来避免参数被Shell解释器错误解析。特别是当参数中包含空格或其他特殊字符时,使用引号可以确保参数被正确解析。

三、日志记录的重要性

在Shell脚本执行成功时记录日志是一个良好的实践,它可以帮助你追踪脚本的执行历史、调试问题以及监控系统的运行状态。日志记录不仅在脚本成功时有用,在脚本失败时也同样重要。

日志记录的方法
在Shell脚本中,你可以使用多种方法来记录日志。以下是几种常见的方法:
1. 使用 echo 命令
echo 命令是最简单的日志记录方法。你可以将日志信息输出到标准输出或标准错误,并将其重定向到一个文件中。

#!/bin/bash 
echo "Script started at $(date)" >> /path/to/logfile.log  
# 脚本逻辑 
echo "Script completed successfully at $(date)" >> /path/to/logfile.log  

2. 使用 logger 命令
logger 命令可以将日志信息发送到系统日志中,通常是 /var/log/syslog 或 /var/log/messages。

#!/bin/bash 
logger "Script started at $(date)" 
# 脚本逻辑 
logger "Script completed successfully at $(date)" 

3. 使用 tee 命令
tee 命令可以将输出同时发送到标准输出和一个或多个文件中。

#!/bin/bash 
echo "Script started at $(date)" | tee -a /path/to/logfile.log  
# 脚本逻辑 
echo "Script completed successfully at $(date)" | tee -a /path/to/logfile.log  

日志文件的管理
为了有效地管理日志文件,你可以考虑以下几点:
1. 日志文件的命名
使用有意义的文件名,例如包含脚本名称和日期时间。

LOGFILE="/path/to/script_$(date +%Y%m%d_%H%M%S).log" 
echo "Script started at $(date)" >> $LOGFILE 

2. 日志轮转
为了避免日志文件过大,可以使用日志轮转工具(如 logrotate)来定期归档和压缩日志文件。
3. 日志级别
在日志中区分不同的日志级别(如 INFO、WARNING、ERROR),以便更容易地过滤和分析日志信息。
log() { 
    local level=$1 
    local message=$2 
    echo "[$(date +%Y-%m-%d\ %H:%M:%S)] [$level] $message" >> /path/to/logfile.log  
} 
 
log "INFO" "Script started" 
# 脚本逻辑 
log "INFO" "Script completed successfully" 

通过这些方法,你可以有效地记录Shell脚本的成功执行日志,并确保日志文件的可管理性和可读性。

四、 shell脚本的数学运算

在Shell脚本中进行数学运算时,需要注意以下几点:

  1. Shell中的数学运算:Shell脚本默认情况下将所有变量视为字符串。因此,直接进行数学运算可能会导致错误。需要使用特定的命令或语法来明确表示数学运算。

  2. 整数运算:对于整数运算,可以使用 let(( ))$[]expr 等方法。这些方法在处理整数时非常有效。

  3. 浮点数运算:如果需要进行浮点数运算,可以使用 bcawk 等外部程序。这些程序支持更复杂的数学运算,包括浮点数运算。

五、常见的数学运算方法

1. 使用 let 命令
let 命令用于进行整数运算。它可以处理基本的算术操作,如加、减、乘、除等。
#!/bin/bash 
x=5 
y=3 
let "z = x + y"
echo "The result is $z"

2. 使用 (( )) 语法
(( )) 语法与 let 类似,用于进行整数运算。
#!/bin/bash 
x=5 
y=3 
(( z = x + y ))
echo "The result is $z"

3. 使用 $[] 语法
$[] 语法也可以用于进行整数运算。
#!/bin/bash 
x=5 
y=3 
z=$(($x + $y))
echo "The result is $z"

4. 使用 expr 命令
expr 命令用于进行整数运算,但需要注意的是,expr 的加号两边必须有空格。
#!/bin/bash 
x=5 
y=3 
z=$(expr $x + $y)
echo "The result is $z"

5. 使用 bc 命令
bc 是一个支持浮点数运算的计算器程序。使用 bc 可以进行更复杂的数学运算。
#!/bin/bash 
x=5.5 
y=3.3 
z=$(echo "$x + $y" | bc)
echo "The result is $z"

6. 使用 awk 命令
awk 是一种文本处理工具,同时也支持数学运算。可以使用 awk 进行浮点数运算。
#!/bin/bash 
x=5.5 
y=3.3 
z=$(awk "BEGIN{print $x + $y}")
echo "The result is $z"

总结
Shell脚本中的数学运算可以通过多种方法实现,具体选择哪种方法取决于运算的复杂程度和所需的数据类型。对于简单的整数运算,可以使用 let、(( )) 或 $[] 等方法;而对于浮点数运算,则可以使用 bc 或 awk 等外部程序。
 示例:
┌──(root㉿kali)-[~/Desktop]
└─# expr 5+10 
5+10
                                                                                             
┌──(root㉿kali)-[~/Desktop]
└─# expr 5 + 10
15
                                                                                             
┌──(root㉿kali)-[~/Desktop]
└─# expr 20 - 10
10
                                                                                             
┌──(root㉿kali)-[~/Desktop]
└─# expr 20 * 10
expr: syntax error: unexpected argument ‘ant’
                                                                                             
┌──(root㉿kali)-[~/Desktop]
└─# expr 20 /* 10
expr: syntax error: unexpected argument ‘/bin’
                                                                                             
┌──(root㉿kali)-[~/Desktop]
└─# expr 20 \* 10
200

┌──(root㉿kali)-[~/Desktop]
└─# expr 20 \ 10 
expr: syntax error: unexpected argument ‘ 10’
                                                                                             
┌──(root㉿kali)-[~/Desktop]
└─# expr 20 / 10
2

┌──(root㉿kali)-[~/Desktop]
└─# expr 20 % 11
9

六、 Shell脚本中数学运算的性能比较

Shell脚本中,不同的数学运算方法在性能上可能会有所不同。以下是对几种常见方法的性能比较:

1. let 命令
let 命令用于进行整数运算。它的性能相对较好,适合简单的整数运算。

#!/bin/bash 
x=5 
y=3 
let "z = x + y"
echo "The result is $z"

2. (( )) 语法
(( )) 语法与 let 类似,用于进行整数运算。它的性能与 let 相当。

#!/bin/bash 
x=5 
y=3 
(( z = x + y ))
echo "The result is $z"

3. $[] 语法
$[] 语法也可以用于进行整数运算。它的性能与 let 和 (( )) 相当。

#!/bin/bash 
x=5 
y=3 
z=$(($x + $y))
echo "The result is $z"

4. expr 命令
expr 命令用于进行整数运算,但需要注意的是,expr 的加号两边必须有空格。由于 expr 需要调用外部命令,因此它的性能可能稍逊于 let、(( )) 和 $[]。

#!/bin/bash 
x=5 
y=3 
z=$(expr $x + $y)
echo "The result is $z"

5. bc 命令
bc 是一个支持浮点数运算的计算器程序。由于 bc 是一个外部程序,因此它的性能可能受到调用外部程序的影响。然而,对于浮点数运算,bc 是一个很好的选择。
#!/bin/bash 
x=5.5 
y=3.3 
z=$(echo "$x + $y" | bc)
echo "The result is $z"

6. awk 命令
awk 是一种文本处理工具,同时也支持数学运算。可以使用 awk 进行浮点数运算。由于 awk 是一个外部程序,因此它的性能可能受到调用外部程序的影响。

#!/bin/bash 
x=5.5 
y=3.3 
z=$(awk "BEGIN{print $x + $y}")
echo "The result is $z"

总结
在Shell脚本中,不同的数学运算方法在性能上可能会有所不同。对于简单的整数运算,let、(( )) 和 $[] 是较好的选择,它们的性能相对较好。对于浮点数运算,bc 和 awk 是较好的选择,但它们的性能可能受到调用外部程序的影响。在实际应用中,可以根据具体的运算需求和性能要求来选择合适的方法。

七、Shell脚本中运算符优先级规则

在Shell脚本中,运算符的优先级规则决定了表达式中运算的执行顺序。以下是一些常见的运算符及其优先级规则:

  1. 算术运算符:
    • 乘法(*)、除法(/)、取模(%):这些运算符具有相同的优先级,且高于加法和减法运算符。它们从左到右依次执行。
    • 加法(+)、减法(-):这些运算符具有相同的优先级,且低于乘法、除法和取模运算符。它们从左到右依次执行。
  2. 关系运算符:
    • 小于(<)、大于(>)、小于等于(<=)、大于等于(>=):这些运算符具有相同的优先级,且低于算术运算符。它们从左到右依次执行。
  3. 逻辑运算符:
    • 逻辑非(!):这个运算符的优先级高于关系运算符。它从右到左依次执行。
    • 逻辑与(&&)、逻辑或(||):这些运算符具有相同的优先级,且低于关系运算符。它们从左到右依次执行。
  4. 赋值运算符:
    • 赋值运算符(=、+=、-=、*=、/=):这些运算符的优先级最低。它们从右到左依次执行。

需要注意的是,Shell脚本中的运算符优先级规则与C语言中的运算符优先级规则非常相似。在编写Shell脚本时,了解这些规则可以帮助我们正确地编写表达式,避免出现意外的结果。

此外,如果对运算符优先级不确定,可以使用括号(())来明确指定运算的顺序。括号可以改变运算的优先级,使得括号内的运算优先执行。这样可以提高代码的可读性和可靠性。

 八、Shell脚本中括号用法示例

单括号 []
单括号在Shell脚本中通常用于条件测试。它们是 test 命令的简写形式。

if [ "$var" = "value" ]; then 
    echo "变量 var 等于 value" 
fi 

双括号 [[]]
双括号提供了比单括号更强大的条件测试功能,支持更多的操作符和正则表达式。

if [[ "$var" == "value" ]]; then 
    echo "变量 var 等于 value" 
fi 

小括号 ()
小括号用于创建子shell或在当前shell中执行命令列表。

(cd /tmp; ls)  # 在子shell中切换到/tmp目录并列出文件 

大括号 {}
大括号用于扩展或分组命令,通常用于变量扩展或命令替换。

echo {a,b,c}  # 输出 a b c 
cp file{,.bak}  # 复制文件为 file 和 file.bak  

反引号 `
反引号用于命令替换,将命令的输出赋值给变量。

var=`date` 
echo "当前日期是: $var" 

美元符号加括号 $()
$() 是反引号的现代替代品,同样用于命令替换,但更易读且支持嵌套。


var=$(date) 
echo "当前日期是: $var" 

 九、Shell脚本中括号嵌套使用

单括号与双括号的区别
在Shell脚本中,单括号()和双括号(())用于不同的上下文,具有不同的功能和用途。
单括号 ()
    命令组:单括号用于创建一个子shell环境,其中的命令会在一个新的子shell中执行。

    (cd /tmp; ls) 

    在这个例子中,cd /tmp和ls命令会在一个新的子shell中执行,不会影响当前shell的工作目录。
    数组初始化:单括号也可以用于初始化数组。

    array=("apple" "banana" "cherry") 

双括号 (())
    算术运算:双括号用于进行算术运算,支持整数运算和比较。

    result=$((10 + 20)) 

    在这个例子中,10 + 20的计算结果会赋值给变量result。
    条件判断:双括号也可以用于条件判断,特别是在if语句中。

    if ((a > b)); then 
        echo "a is greater than b" 
    fi 

嵌套使用
在Shell脚本中,单括号和双括号可以嵌套使用,但需要注意它们的优先级和作用域。
嵌套示例

result=$(( (5 + 3) * 2 )) 

在这个例子中,首先计算5 + 3的结果,然后将其乘以2,最终结果赋值给result。
复杂嵌套

if (( (a > b) && (b > c) )); then 
    echo "a is greater than b, and b is greater than c" 
fi 

在这个例子中,首先计算a > b和b > c的结果,然后进行逻辑与运算,判断条件是否成立。
注意事项
    优先级:在嵌套使用时,内层括号的计算优先级高于外层括号。
    作用域:单括号创建的子shell不会影响当前shell的环境变量和工作目录。
    语法错误:确保括号的匹配和嵌套正确,避免语法错误。
通过合理使用单括号和双括号,可以实现复杂的逻辑和运算,提高Shell脚本的灵活性和功能性。

十、 Shell脚本中子shell的作用和应用

在Shell脚本中,子Shell(subshell)是一个重要的概念,它在许多场景下发挥着关键作用。子Shell是由父Shell创建的一个新的Shell进程,用于执行特定的任务或脚本。以下是子Shell的主要作用和应用场景:

1. 隔离环境
子Shell提供了一个独立的执行环境,其环境变量、工作目录和其他状态信息不会影响到父Shell。这在执行可能改变环境的命令时特别有用,可以避免对全局环境的污染。
(parent_dir=$(pwd); (cd /tmp; echo "Current dir in subshell: $(pwd)"); echo "Current dir in parent shell: $parent_dir")

2. 并行执行
子Shell可以用于并行执行任务。通过将任务放在子Shell中,可以在后台运行多个任务而不阻塞主Shell。
(subshell_task1 & subshell_task2 &)

3. 简化复杂任务
在处理复杂任务时,子Shell可以帮助分解任务,使脚本更清晰和易于维护。
(subshell_function; other_command)

4. 执行外部命令
当执行外部命令或脚本时,通常会创建一个子Shell来执行这些命令,这样可以确保命令的执行不会影响到当前Shell环境。
(result=$(./external_script.sh)) 

5. 捕获命令输出
子Shell可以用于捕获命令的输出,并将其传递给父Shell。

(output=$(subshell_command); echo "$output")

应用示例
以下是一些子Shell应用的具体示例:
示例1:改变目录并在子Shell中执行命令
(parent_dir=$(pwd); (cd /tmp; echo "Current dir in subshell: $(pwd)"); echo "Current dir in parent shell: $parent_dir")

示例2:并行执行任务
(subshell_task1 & subshell_task2 &)

示例3:执行外部脚本并捕获输出
(result=$(/path/to/external_script.sh);  echo "Script output: $result")

示例4:在子Shell中执行一系列命令
(subshell_function; other_command)

结论
子Shell在Shell脚本编程中扮演着重要角色,通过提供独立的执行环境、支持并行执行、简化复杂任务等方式,极大地增强了Shell脚本的灵活性和功能性。理解和熟练运用子Shell,可以显著提高Shell脚本的效率和可维护性。

 未完待续~~~!!!!

标签:脚本,SRC,Shell,运算,运维,echo,传递,参数
From: https://blog.csdn.net/m0_62828084/article/details/143809239

相关文章

  • [20241114]建立完善mod_addr.sh脚本.txt
    [20241114]建立完善ext_kglob.sh脚本.txt--//以前考虑使用管道问题,我考虑复杂了,看了gdb文档,实际上gdb-ex参数支持在命令行加入执行命令。--//选择使用mmon后台进程,改写如下:$catext_kglob.sh#/bin/bash#extraceobjectstringfromobjecthandleaddress#arg1=addressarg2=o......
  • 泷羽sec-----shell脚本编程(2--3)
    声明!学习视频来自B站up主泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷......
  • 运维开发之脚本语言(Script Language for Operations and Development)
     ......
  • 飞牛云fnOS本地部署1Panel服务器运维管理面板并搭建Halo个人博客
    ......
  • 云原生之运维监控实践-使用Prometheus与Grafana实现对Nginx和Nacos服务的监测
    背景如果你要为应用程序构建规范或用户故事,那么务必先把应用程序每个组件的监控指标考虑进来,千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章,当时使用的是docker-compose在单......
  • bat批处理脚本
    目录基本结构环境变量临时环境变量永久环境变量区别特殊变量延迟变量扩展循环结构命令执行和错误处理实用技巧""的作用1.处理空格和特殊字符2.防止命令解析错误3.确保命令正确执行4.处理变量扩展5.避免路径解析错误声明:本文主要用作技术分享,所有内容仅......
  • IDMOS-运维中心(三)
     官网        IDMOS基于.NET的低代码开发平台和运维中心,集成管理后台、开放平台、服务监控、日志管理、运维管理等一系列功能,致力于为用户提供一站式的解决方案介绍        IDMOS运维中心简化运维、技术人员日常运维操作,提高系统的稳定性和可靠性,致......
  • 写一个Python脚本删除一个.py文件的所有注释
    Anyimprovementwouldbeappreciated.importredefremove_comments(file_path):withopen(file_path,'r')asfile:content=file.read()#First,findandstorestringassignmentsprotected_strings={}counter=0......
  • 写一个自动构建docker镜像推送至私有仓库并且部署的脚本
    脚本如下#catbuild/docker.sh#!/usr/bin/envbash#获取当前分支名BRANCH=`gitrev-parse--abbrev-refHEAD`#获取git提交的标识符用于Docker镜像的标签BUILD_TAG="$(gitrev-parse--short$BRANCH)"HARBOR_URL="harbor.xxx.com"echo"Tagis${BUILD_TAG}"......
  • linux运维面试题【基础篇】
    前言本篇主要分享linux运维面试过程中常见的面试题材,当时自己面试的时候就遇到3道原题,最终也是顺利通过面试,下面给大家分享一下:面试题库1、描述Linux系统的启动过程电源BIOS自检读取MBR,运行grub加载内核内核启动/sbin/init程序,进行系统初始化根据系统运行级别执行......