shell 中seq的用法 echo -n用法

本文介绍了在Bash shell中使用seq命令进行循环操作的方法,包括从1到100的循环示例,并展示了如何利用echo命令的不同选项来实现文本的格式化输出。

用法:seq [选项]... 尾数
 或:seq [选项]... 首数 尾数
 或:seq [选项]... 首数 增量 尾数

 

从1循环到100的两种方法(bash 其它的shell没试过)
for x in `seq 1 100`;do echo $x;done
for x in {1..100};do echo $x;done

 

echo -n 不换行输出

 
$echo -n "123"
$echo "456"
 
最终输出 
123456
echo -e 处理特殊字符
 
若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
 
$echo -e "a\bdddd"
dddd
 
$echo -e "a\adddd" //输出同时会发出报警声音
adddd

转载于:https://www.cnblogs.com/zhunl/p/7543563.html

这是混淆方式1 #!/bin/bash clear #--------------------------------------------------------------------- # 提示作者 echo -e "\033[33m 作者BiliBili: director_mark\033[0m" echo -e "\033[33m 作者BiliBili UID: 1113918991\033[0m" #--------------------------------------------------------------------- echo "──────────────────────────────────────────────────────────" #--------------------------------------------------------------------- # 报时 TIME=`date +%Y%m%d%H%M%S` echo "尊敬的用户,此shell脚本执行时间是: " date +"%Y-%m-%d %H:%M:%S.%N" #--------------------------------------------------------------------- echo "──────────────────────────────────────────────────────────" #--------------------------------------------------------------------- # 善意提醒 echo -e "\033[31m Base64不是加密,而是一种编码方式,任何人都可以很轻松的对其进行解密,如需加密shell脚本,有条件的可以使用如AES等加密方式\033[0m" #--------------------------------------------------------------------- echo "──────────────────────────────────────────────────────────" #--------------------------------------------------------------------- # 检测执行环境 if [ $SHELL != /system/bin/sh ]; then echo -e "\033[33m shell脚本当前执行环境是: 拓展包\033[0m" #----- ----- ----- ----- ----- ----- else echo "──────────────────⇧执行环境检测(系统)标识⇧─────────────────" echo -e "\033[33m shell脚本当前环境检测是: 系统\033[0m" fi #----- ----- ----- ----- ----- ----- # Root检测 if [ `id -u` -ne 0 ]; then echo -e "\033[33m shell脚本当前为 非Root执行\033[0m" echo -e "\033[36m 需加密文件和保存路径建议存放到本地存储(路径合法前提下)\033[0m" #----- ----- ----- ----- ----- ----- else echo -e "\033[33m shell脚本当前为 Root执行(需加密文件和保存路径可以为任何合法路径)\033[0m" fi #--------------------------------------------------------------------- echo "──────────────────────────────────────────────────────────" #--------------------------------------------------------------------- # 输入需要加密的文件的绝对路径 echo -n " 请输入需要编码的文件绝对路径: " read ORIGINAL_SCRIPT_PATH #--------------------------------------------------------------------- echo "──────────────────────────────────────────────────────────" #--------------------------------------------------------------------- # 确保原始脚本存在 if [ ! -f "$ORIGINAL_SCRIPT_PATH" ]; then echo -e "\033[31m 文件不存在!请检查您的文件路径是否输入正确以及合法!\033[0m" exit 1 fi #--------------------------------------------------------------------- # 输入加密后的文件绝对路径 echo -n " 请输入编码后的文件绝对路径: " read ENCODED_SCRIPT_PATH #--------------------------------------------------------------------- # 提示 echo -e "\033[31m如果保存文件与原文件路径相同,那么保存后的文件会覆盖原文件\033[0m" #--------------------------------------------------------------------- echo "──────────────────────────────────────────────────────────" #--------------------------------------------------------------------- # 输入加密层数 echo -n " 请输入编码层数: " read NOEL_SCRIPT_NUMBER #--------------------------------------------------------------------- echo "──────────────────────────────────────────────────────────" #--------------------------------------------------------------------- # 读取和初始化 # 读取原始脚本内容 SCRIPT_CONTENT=$(cat "$ORIGINAL_SCRIPT_PATH") # 初始化编码内容变量 ENCODED_CONTENT="$SCRIPT_CONTENT" #--------------------------------------------------------------------- # 执行Base64编码 echo -e "\033[33m 准备对文件进行Base64编码处理...\033[0m" date +"首次编译开始时间: %Y-%m-%d %H:%M:%S.%N" for i in $(seq 1 $NOEL_SCRIPT_NUMBER); do ENCODED_CONTENT=$(echo -n "$ENCODED_CONTENT" | base64) # 进度提示信息 echo -e "\033[32m>>>已编译 $i 层(第$i层,共$NOEL_SCRIPT_NUMBER层)<<<\033[0m" date +"第 $i 层结束时间: %H:%M:%S.%N" done #--------------------------------------------------------------------- echo "──────────────────────────────────────────────────────────" #--------------------------------------------------------------------- # 询问用户是否需要添加可执行化 echo " 1) 为文件添加可执行化(针对shell脚本(不安全的加密方式))\n 2) 不对文件添加可执行化" echo -n " 请输入: " read YoN_SCRIPT_NUMBER #--------------------------------------------------------------------- echo "──────────────────────────────────────────────────────────" #--------------------------------------------------------------------- # 创建文件 if (( $YoN_SCRIPT_NUMBER == 1 )); then # 创建一个新的脚本文件并写入解码逻辑与编码后内容 echo -e "\033[36m 对编码后的文件进行可执行化\033[0m" cat > "$ENCODED_SCRIPT_PATH" <<EOF #!/bin/bash ENCODED_SCRIPT="$ENCODED_CONTENT" for i in \$(seq 1 $NOEL_SCRIPT_NUMBER); do ENCODED_SCRIPT=\$(echo -n "\$ENCODED_SCRIPT" | base64 -d) done eval "\$ENCODED_SCRIPT" EOF #----- ----- ----- ----- ----- ----- elif (( $YoN_SCRIPT_NUMBER == 2 )); then echo -e "\033[36m 不对编码后的文件进行可执行化\033[0m" cat > "$ENCODED_SCRIPT_PATH" <<EOF # $NOEL_SCRIPT_NUMBER $ENCODED_CONTENT EOF #----- ----- ----- ----- ----- ----- else echo -e "\033[36m $YoN_SCRIPT_NUMBER是非法的,自动选择2(不对编译后的文件进行可执行化)\033[0m" cat > "$ENCODED_SCRIPT_PATH" <<EOF # $NOEL_SCRIPT_NUMBER $ENCODED_CONTENT EOF fi #--------------------------------------------------------------------- # 赋予执行权限 # 为新脚本添加执行权限(Linux系统用得上,但是Android系统一般会自动添加660普通权限) chmod +x "$ENCODED_SCRIPT_PATH" #--------------------------------------------------------------------- echo "──────────────────────────────────────────────────────────" #--------------------------------------------------------------------- # 检查是否成功 if [ -f "$ENCODED_SCRIPT_PATH" ]; then echo -e "\033[32m 加密脚本已保存在: $ENCODED_SCRIPT_PATH\033[0m" TIMEz=`date +%Y-%m-%d.%H:%M:%S` #----- ----- ----- ----- ----- ----- else echo -e "\033[31m 保存失败!\033[0m" echo -e "\033[31m这可能是由于权限不足造成的,你可以尝试将需要加密的文件和保存路径进行更改(更改到可以读写的目录)\033[0m" fi #--------------------------------------------------------------------- # 创建日志 # 创建文件夹 mkdir -p /storage/emulated/0/Engineering/Base64-code/ # 创建日志 # 写入 JOURNAL_FIXED_FILE=/storage/emulated/0/Engineering/Base64-code/ TIMEz_FILE=$TIMEz.log cat > "$JOURNAL_FIXED_FILE$TIMEz_FILE" << EOF 'Base64编码'在$TIMEz时 将: $ORIGINAL_SCRIPT_PATH 进行 $NOEL_SCRIPT_NUMBER 层Base64编码 保存在: $ENCODED_SCRIPT_PATH 保存值: $YoN_SCRIPT_NUMBER (1:进行可执行化 2&其他:不进行可执行) EOF # 提示 echo -e "\033[33m尊敬的用户:\033[0m" echo -e "\033[36m 本次编码日志保存在/storage/emulated/0/Engineering/Base64-code/目录下的$TIMEz.log文件\033[0m" 这是混淆方式2 #!/bin/bash clear #--------------------------------------------------------------------- # 报时 TIME=`date +%Y%m%d%H%M%S` date +"此shell脚本执行时间: %Y-%m-%d %H:%M:%S.%N" #--------------------------------------------------------------------- # 温馨提示 echo -e "\033[31m HEX编码(16进制编码)不是加密,而是一种编码方式,任何人都可以很轻松的将编码后的文件进行解码\033[0m" #--------------------------------------------------------------------- echo_bold_red() { echo -e "\033[1m\033[31m$1\033[0m" } #--------------------------------------------------------------------- # 输入需要编码的文件路径和确保存在 echo -n " 请输入需要编码的文件路径:" read ORIGINAL_SCRIPT_PATH #----- ----- ----- ----- ----- ----- # 确保原始脚本存在 if [ ! -f "$ORIGINAL_SCRIPT_PATH" ]; then echo "原始脚本不存在: $ORIGINAL_SCRIPT_PATH" exit 1 fi #--------------------------------------------------------------------- # 输入编码后的文件保存路径 echo -n " 请输入编码后的文件的路径: " read ENCODED_SCRIPT_PATH #--------------------------------------------------------------------- # 加密层数 # 初始化ENCODED_CONTENT ENCODED_CONTENT="$SCRIPT_CONTENT" # 提示用户输入编码层数 echo -n " 编码层数: " read ENCODING_LAYERS if [ "$ENCODING_LAYERS" -le 0 ]; then echo "编码层数至少为1。" exit 1 fi #--------------------------------------------------------------------- # 歪比巴布(大脑抽风) # 读取原始脚本内容 SCRIPT_CONTENT=$(cat "$ORIGINAL_SCRIPT_PATH") # 初始化编码内容变量 ENCODED_CONTENT="$SCRIPT_CONTENT" #----- ----- ----- ----- ----- ----- # 计算原始脚本大小 ORIGINAL_SIZE=$(echo -n "$SCRIPT_CONTENT" | wc -c | awk '{print $1/1024/1024}') echo "原始脚本的大小为: ${ORIGINAL_SIZE} MB" #----- ----- ----- ----- ----- ----- # 初始化大小阈值 MAX_SIZE_1MB=1 MAX_SIZE_2MB=2 #----- ----- ----- ----- ----- ----- # 初始化ENCODED_CONTENT ENCODED_CONTENT="$SCRIPT_CONTENT" #----- ----- ----- ----- ----- ----- # 计算达到1MB和2MB的编码层数 i=0 CONTINUE_ENCODING=1 while [ "$CONTINUE_ENCODING" -lt 1 ]; do i=$(expr $i + 1) echo "尝试第 ${i} 次编码" # 编码 ENCODED_CONTENT=$(echo -n "$ENCODED_CONTENT" | xxd -p | tr -d '\n') # 计算编码后大小 ENCODED_SIZE=$(echo -n "$ENCODED_CONTENT" | wc -c | awk '{print $1/1024/1024}') echo "编码$1次后的大小为: ${ENCODED_SIZE} MB" #--------------------------------------------------------------------- # 检查大小 # 检查是否达到1MB if [ "$(echo "$ENCODED_SIZE >= $MAX_SIZE_1MB" | bc)" -eq 1 ] && [ "$MAX_SIZE_1MB" != "-1" ]; then echo_bold_red "达到1MB的编码层数为: $i" MAX_SIZE_1MB=-1 fi # 检查是否超过2MB if [ "$(echo "$ENCODED_SIZE >= $MAX_SIZE_2MB" | bc)" -eq 1 ]; then echo_bold_red "超过2MB的最小编码层数为: $i" break fi done #--------------------------------------------------------------------- # 编码 # 应用用户指定层数的十六进制编码 for i in $(seq 1 $ENCODING_LAYERS); do ENCODED_CONTENT=$(echo -n "$ENCODED_CONTENT" | xxd -p | tr -d '\n') CONTENT_SIZE=$(echo -n "$ENCODED_CONTENT" | wc -c | awk '{print $1/1024/1024}') echo "第 $i 层编码后的数据大小为: $CONTENT_SIZE MB" if [ "$(echo "$CONTENT_SIZE > 10" | bc)" -eq 1 ]; then echo "编码后的数据已超过10MB。请减少编码层数。" exit 1 fi done #--------------------------------------------------------------------- # 显示编码后大小 ENCODED_SIZE=$(echo -n "$ENCODED_CONTENT" | wc -c | awk '{print $1/1024/1024}') echo_bold_red "编码脚本最后的大小为: ${ENCODED_SIZE} MB" #--------------------------------------------------------------------- # 创建并写入文件 # 创建新脚本并写入解码逻辑与编码内容 cat > "$ENCODED_SCRIPT_PATH" <<EOF #!/bin/bash ENCODED_SCRIPT="$ENCODED_CONTENT" decode_hex() { local hex=\$1 local count=\$2 while [ \$count -gt 0 ]; do local decoded=\$(echo -n "\$hex" | xxd -r -p) hex="\$decoded" count=\$(expr \$count - 1) done echo -n "\$hex" } DECODED_SCRIPT=\$(decode_hex "\$ENCODED_SCRIPT" $ENCODING_LAYERS) eval "\$DECODED_SCRIPT" EOF #--------------------------------------------------------------------- # 为新脚本添加执行权限 chmod +x "$ENCODED_SCRIPT_PATH" #--------------------------------------------------------------------- # 确保保存成功 if [ ! -f "$ENCODED_SCRIPT_PATH" ]; then echo -e "\033[31m 保存失败!这可能是由于权限不足或保存路径不合法造成的!\033[0m" else echo -e "\033[32m 编码脚本已生成并位于路径: $ENCODED_SCRIPT_PATH\033[0m" fi 我希望结合这两个脚本,在混淆时,处理奇数层使用第二种混淆,处理偶数层使用第一种混淆,二者共同完成一次混淆任务,并且混淆后的代码可以完美运行
最新发布
05-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值