免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: damcool
打印 上一主题 下一主题

[文本处理] BASH版本的base64 [复制链接]

论坛徽章:
40
水瓶座
日期:2013-08-15 11:26:422015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之乌兹别克斯坦
日期:2015-03-27 14:01:172015年亚洲杯之约旦
日期:2015-03-31 15:06:442015亚冠之首尔
日期:2015-06-16 23:24:37IT运维版块每日发帖之星
日期:2015-07-01 22:20:002015亚冠之德黑兰石油
日期:2015-07-08 09:32:07IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-10-11 06:20:00IT运维版块每日发帖之星
日期:2015-11-10 06:20:00
11 [报告]
发表于 2014-01-01 17:29 |只看该作者
function 开头定义函数 这种语法好多shell并不支持吧 ~

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
12 [报告]
发表于 2014-01-02 08:06 |只看该作者
forgaoqiang 发表于 2014-01-01 17:29
function 开头定义函数 这种语法好多shell并不支持吧 ~


如果视力不好,请佩带眼镜观看!

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
13 [报告]
发表于 2014-01-02 08:29 |只看该作者
回复 11# forgaoqiang


    楼主用的bash没有问题

论坛徽章:
40
水瓶座
日期:2013-08-15 11:26:422015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之乌兹别克斯坦
日期:2015-03-27 14:01:172015年亚洲杯之约旦
日期:2015-03-31 15:06:442015亚冠之首尔
日期:2015-06-16 23:24:37IT运维版块每日发帖之星
日期:2015-07-01 22:20:002015亚冠之德黑兰石油
日期:2015-07-08 09:32:07IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-10-11 06:20:00IT运维版块每日发帖之星
日期:2015-11-10 06:20:00
14 [报告]
发表于 2014-01-02 13:08 |只看该作者

嵌入式的shell环境用多了 习惯性的不加 function 进行定义了 加function的这种语法兼容性不如不加的兼容性好

比如 ash dash(ubuntu的普通用户默认shell)等等都有这个问题

如果你听力不好 该看看医生了 {:3_183:}

damcool 发表于 2014-01-02 08:06
如果视力不好,请佩带眼镜观看!

论坛徽章:
40
水瓶座
日期:2013-08-15 11:26:422015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之乌兹别克斯坦
日期:2015-03-27 14:01:172015年亚洲杯之约旦
日期:2015-03-31 15:06:442015亚冠之首尔
日期:2015-06-16 23:24:37IT运维版块每日发帖之星
日期:2015-07-01 22:20:002015亚冠之德黑兰石油
日期:2015-07-08 09:32:07IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-10-11 06:20:00IT运维版块每日发帖之星
日期:2015-11-10 06:20:00
15 [报告]
发表于 2014-01-02 13:10 |只看该作者
恩 是的 标准的bash应该是没有问题的 看帖的时候突然想起来这个问题了 就随口说了一下

不得不佩服这几个大神shell的编程功底  收藏下作为“库”使用了~

Shell_HAT 发表于 2014-01-02 08:29
回复 11# forgaoqiang

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
16 [报告]
发表于 2014-01-02 13:22 |只看该作者
本帖最后由 bikkuri 于 2014-01-02 18:03 编辑

今天抽了点时间来仔细测试一下这个程序,发现解码的部分还是有问题。
我先把原来的代码拆解为编码和解码两个部分:
  1. root@box:~# cat encode.sh
  2. #!/bin/sh
  3. base64encode()
  4. {
  5.         awk -v B64="$CODE" '{for(i=1;i<=NF;i+=3){t=0;t=$i*256*256+$(i+1)*256+$(i+2);for(j=3;j>=0;j--){c=(i+2-j<=NF)?substr(B64,int(t/2^(6*j))+1,1):"=";printf("%c",c);t%=2^(6*j);if (++k==76) printf"\n";k%=76}}}'
  6. }
  7. CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  8. base64encode
  9. root@box:~# cat decode.sh
  10. #!/bin/sh
  11. base64decode()
  12. {
  13.         awk -v B64="$CODE" '{while(length()){split(substr($0,1,4),a,"");$0=substr($0,5);t=0;for(i=3;i>=0;i--) t=t+2^(6*i)*((a[4-i]=="=")?0:index(B64,a[4-i])-1);for (i=2;i>=0;i--) if (a[4-i]!="="){printf("\\\\\\x%X",t/2^(8*i));t=t%2^(8*i)}}printf"\n"}'|xargs printf
  14. #       for raw_data in $(awk -v B64="$CODE" '{while(length()){split(substr($0,1,4),a,"");$0=substr($0,5);t=0;for(i=3;i>=0;i--) t=t+2^(6*i)*((a[4-i]=="=")?0:index(B64,a[4-i])-1);for (i=2;i>=0;i--) if (a[4-i]!="="){printf("\\\\x%X",t/2^(8*i));t=t%2^(8*i)}}printf"\n"}'); do printf "$raw_data";done
  15. }
  16. CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  17. base64decode
  18. root@box:~#
复制代码
然后分别对其做测试,发现在处理比较小的文件时,工作是正常的。
  1. root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > hello.64; cat hello.64|./decode.sh |gzip -cd
  2. Hello

  3. root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > hello.64; cat hello.64|./decode.sh |hexdump -ve '1/1 "%d "'
  4. 31 139 8 0 19 237 196 82 2 3 243 72 205 201 201 231 2 0 22 53 150 49 6 0 0 0 root@box:~#
  5. root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'
  6. 31 139 8 0 29 237 196 82 2 3 243 72 205 201 201 231 2 0 22 53 150 49 6 0 0 0 root@box:~#
  7. root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh |./decode.sh |hexdump -ve '1/1 "%d "'
  8. 31 139 8 0 134 237 196 82 2 3 243 72 205 201 201 231 2 0 22 53 150 49 6 0 0 0 root@box:~#
复制代码
但是一旦处理一个稍微大一点(其实也不大,大约1700字节的文本文件,压缩后约300多字节)的文件时,解码程序不能输出所有解码内容:
  1. root@box:~# cat led|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > led.64; cat led.64|./decode.sh |gzip -cd
  2. gzip: error inflating

  3. root@box:~# cat led|gzip -c|hexdump -ve '1/1 "%d "'
  4. 31 139 8 0 196 238 196 82 2 3 181 85 221 110 218 48 20 190 198 79 225 186 81 85 38 209 192 164 77 171 170 86 154 246 6 91 239 186 42 50 198 9 86 19 155 197 134 10 81 222 125 231 216 113 126 96 208 222 236 42 62 255 223 249 114 142 125 121 145 206 149 78 237 146 166 210 137 180 22 55 194 84 149 209 228 146 94 255 24 211 207 211 233 55 106 86 82 191 214 238 198 212 5 33 191 30 191 255 124 188 191 253 74 72 105 248 34 43 229 226 122 76 119 100 84 26 193 75 170 121 37 227 217 110 109 110 163 224 106 85 20 178 142 226 66 110 226 177 50 11 217 169 115 190 46 93 39 150 124 11 88 6 98 158 71 89 105 39 235 13 47 9 25 9 163 115 85 100 133 116 161 44 77 102 177 126 207 132 232 208 226 191 44 241 14 108 224 209 192 68 167 120 100 218 104 57 244 2 244 232 225 155 232 169 177 19 212 251 47 43 149 126 25 132 101 115 99 218 22 67 124 56 50 173 202 195 2 190 241 224 212 112 112 100 206 243 206 142 164 244 28 34 51 232 208 158 217 151 233 176 202 202 212 46 179 142 59 143 186 147 128 207 39 58 145 52 5 130 82 81 114 107 83 248 205 54 77 118 158 177 125 58 7 106 150 78 75 107 233 51 189 186 194 223 63 146 98 105 40 179 210 57 165 11 186 94 81 8 161 201 14 169 222 67 89 200 200 146 166 97 70 47 238 41 244 220 5 131 53 26 161 240 31 58 243 38 52 132 188 51 250 240 1 48 39 18 189 189 117 137 166 31 77 180 143 45 37 113 14 30 78 243 209 14 247 72 112 139 147 213 40 24 144 15 74 166 165 131 89 97 227 0 112 162 61 21 27 214 235 191 169 133 131 117 166 14 152 149 144 89 88 178 54 200 143 219 153 168 176 96 161 165 209 221 29 65 68 78 85 0 111 8 200 207 89 3 234 247 0 84 24 198 179 192 192 37 195 41 61 200 151 231 39 19 194 248 190 159 17 231 186 5 189 182 243 255 72 99 187 39 103 34 185 112 106 163 220 54 107 175 158 3 94 187 37 26 192 236 169 143 233 232 173 225 153 210 189 245 108 203 217 87 229 196 242 105 58 185 125 254 228 203 133 123 209 187 86 220 190 160 207 209 194 163 161 221 119 239 117 128 19 117 167 96 250 224 247 80 198 164 0 18 130 45 23 4 56 218 19 2 232 107 23 94 139 127 222 47 221 143 108 48 227 11 131 215 184 147 85 167 204 77 45 185 88 210 248 252 224 69 19 10 252 5 101 153 181 43 204 6 0 0 root@box:~#

  5. root@box:~# cat led|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > led.64; cat led.64|./decode.sh |hexdump -ve '1/1 "%d "'
  6. 31 139 8 0 42 239 196 82 2 3 181 85 221 110 218 48 20 190 198 79 225 186 81 85 38 209 192 164 77 171 170 86 154 246 6 91 239 186 42 50 198 9 86 19 155 197 134 10 81 222 125 231 216 113 126 96 208 root@box:~#
复制代码
解码程序如果改用下面一行不用xargs的命令,则输出比原文件长几倍,而且内容也不正确。
  1. root@box:~# cat led|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > led.64; cat led.64|./decode.sh |hexdump -ve '1/1 "%d "'
  2. 92 120 49 70 92 120 56 66 92 120 56 92 120 48 92 120 56 49 92 120 51 54 92 120 67 53 92 120 53 50 92 120 50 92 120 51 92 120 66 53 92 120 53 53 92 120 68 68 92 120 54 69 92 120 68 65 92 120 51 48 92 120 49 52 92 120 66 69 92 120 67 54 92 120 52 70 92 120 69 49 92 120 66 65 92 120 53 49 92 120 53 53 92 120 50 54 92 120 68 49 92 120 67 48 92 120 65 52 92 120 52 68 92 120 65 66 92 120 65 65 92 120 53 54 92 120 57 65 92 120 70 54 92 120 54 92 120 53 66 92 120 69 70 92 120 66 65 92 120 50 65 92 120 51 50 92 120 67 54 92 120 57 92 120 53 54 92 120 49 51 92 120 57 66 92 120 67 53 92 120 56 54 92 120 65 92 120 53 49 92 120 68 69 92 120 55 68 92 120 69 55 92 120 68 56 92 120 55 49 92 120 55 69 92 120 54 48 92 120 68 48 92 120 68 69 92 120 69 67 92 120 50 65 92 120 51 69 92 120 70 70 92 120 68 70 92 120 70 57 92 120 55 50 92 120 56 69 92 120 55 68 92 120 55 57 92 120 57 49 92 120 67 69 92 120 57 53 92 120 52 69 92 120 69 68 92 120 57 50 92 120 65 54 92 120 68 50 92 120 56 57 92 120 66 52 92 120 49 54 92 120 51 55 92 120 67 50 92 120 53 52 92 120 57 53 92 120 68 49 92 120 69 52 92 120 57 50 92 120 53 69 92 120 70 70 92 120 49 56 92 120 68 51 92 120 67 70 92 120 68 51 92 120 69 57 92 120 51 55 92 120 54 65 92 120 53 54 92 120 53 50 92 120 66 70 92 120 68 54 92 120 69 69 92 120 67 54 92 120 68 52 92 120 53 92 120 50 49 92 120 66 70 92 120 49 69 92 120 66 70 92 120 70 70 92 120 55 67 92 120 66 67 92 120 66 70 92 120 70 68 92 120 52 65 92 120 52 56 92 120 54 57 92 120 70 56 92 120 50 50 92 120 50 66 92 120 69 53 92 120 69 50 92 120 55 65 92 120 52 67 92 120 55 55 92 120 54 52 92 120 53 52 92 120 49 65 92 120 67 49 92 120 52 66 92 120 65 65 92 120 55 57 92 120 50 53 92 120 69 51 92 120 68 57 92 120 54 69 92 120 54 68 92 120 54 69 92 120 65 51 92 120 69 48 92 120 54 65 92 120 53 53 92 120 49 52 92 120 66 50 92 120 56 69 92 120 69 50 92 120 52 50 92 120 54 69 92 120 69 50 92 120 66 49 92 120 51 50 92 120 66 92 120 68 57 92 120 65 57 92 120 55 51 92 120 66 69 92 120 50 69 92 120 53 68 92 120 50 55 92 120 57 54 92 120 55 67 92 120 66 92 120 53 56 92 120 54 92 120 54 50 92 120 57 69 92 120 52 55 92 120 53 57 92 120 54 57 92 120 50 55 92 120 69 66 92 120 68 92 120 50 70 92 120 57 92 120 49 57 92 120 57 92 120 65 51 92 120 55 51 92 120 53 53 92 120 54 52 92 120 56 53 92 120 55 52 92 120 65 49 92 120 50 67 92 120 52 68 92 120 54 54 92 120 66 49 92 120 55 69 92 120 67 70 92 120 56 52 92 120 69 56 92 120 68 48 92 120 69 50 92 120 66 70 92 120 50 67 92 120 70 49 92 120 69 92 120 54 67 92 120 69 48 92 120 68 49 92 120 67 48 92 120 52 52 92 120 65 55 92 120 55 56 92 120 54 52 92 120 68 65 92 120 54 56 92 120 51 57 92 120 70 52 92 120 50 92 120 70 52 92 120 69 56 92 120 69 49 92 120 57 66 92 120 69 56 92 120 65 57 92 120 66 49 92 120 49 51 92 120 68 52 92 120 70 66 92 120 50 70 92 120 50 66 92 120 57 53 92 120 55 69 92 120 49 57 92 120 56 52 92 120 54 53 92 120 55 51 92 120 54 51 92 120 68 65 92 120 49 54 92 120 52 51 92 120 55 67 92 120 51 56 92 120 51 50 92 120 65 68 92 120 67 65 92 120 67 51 92 120 50 92 120 66 69 92 120 70 49 92 120 69 48 92 120 68 52 92 120 55 48 92 120 55 48 92 120 54 52 92 120 67 69 92 120 70 51 92 120 67 69 92 120 56 69 92 120 65 52 92 120 70 52 92 120 49 67 92 120 50 50 92 120 51 51 92 120 69 56 92 120 68 48 92 120 57 69 92 120 68 57 92 120 57 55 92 120 69 57 92 120 66 48 92 120 67 65 92 120 67 65 92 120 68 52 92 120 50 69 92 120 66 51 92 120 56 69 92 120 51 66 92 120 56 70 92 120 66 65 92 120 57 51 92 120 56 48 92 120 67 70 92 120 50 55 92 120 51 65 92 120 57 49 92 120 51 52 92 120 53 92 120 56 50 92 120 53 50 92 120 53 49 92 120 55 50 92 120 54 66 92 120 53 51 92 120 70 56 92 120 67 68 92 120 51 54 92 120 52 68 92 120 55 54 92 120 57 69 92 120 66 49 92 120 55 68 92 120 51 65 92 120 55 92 120 54 65 92 120 57 54 92 120 52 69 92 120 52 66 92 120 54 66 92 120 69 57 92 120 51 51 92 120 66 68 92 120 66 65 92 120 67 50 92 120 68 70 92 120 51 70 92 120 57 50 92 120 54 50 92 120 54 57 92 120 50 56 92 120 66 51 92 120 68 50 92 120 51 57 92 120 65 53 92 120 66 92 120 66 65 92 120 53 69 92 120 53 49 92 120 56 92 120 65 49 92 120 67 57 92 120 69 92 120 65 57 92 120 68 69 92 120 52 51 92 120 53 57 92 120 67 56 92 120 67 56 92 120 57 50 92 120 65 54 92 120 54 49 92 120 52 54 92 120 50 70 92 120 69 69 92 120 50 57 92 120 70 52 92 120 68 67 92 120 53 92 120 56 51 92 120 51 53 92 120 49 65 92 120 65 49 92 120 70 48 92 120 49 70 92 120 51 65 92 120 70 51 92 120 50 54 92 120 51 52 92 120 56 52 92 120 66 67 92 120 51 51 92 120 70 65 92 120 70 48 92 120 49 92 120 51 48 92 120 50 55 92 120 49 50 92 120 66 68 92 120 66 68 92 120 55 53 92 120 56 57 92 120 65 54 92 120 49 70 92 120 52 68 92 120 66 52 92 120 56 70 92 120 50 68 92 120 50 53 92 120 55 49 92 120 69 92 120 49 69 92 120 52 69 92 120 70 51 92 120 68 49 92 120 69 92 120 70 55 92 120 52 56 92 120 55 48 92 120 56 66 92 120 57 51 92 120 68 53 92 120 50 56 92 120 49 56 92 120 57 48 92 120 70 92 120 52 65 92 120 65 54 92 120 65 53 92 120 56 51 92 120 53 57 92 120 54 49 92 120 69 51 92 120 48 92 120 55 48 92 120 65 50 92 120 51 68 92 120 49 53 92 120 49 66 92 120 68 54 92 120 69 66 92 120 66 70 92 120 65 57 92 120 56 53 92 120 56 51 92 120 55 53 92 120 65 54 92 120 69 92 120 57 56 92 120 57 53 92 120 57 48 92 120 53 57 92 120 53 56 92 120 66 50 92 120 51 54 92 120 67 56 92 120 56 70 92 120 68 66 92 120 57 57 92 120 65 56 92 120 66 48 92 120 54 48 92 120 65 49 92 120 65 53 92 120 68 49 92 120 68 68 92 120 49 68 92 120 52 49 92 120 52 52 92 120 52 69 92 120 53 53 92 120 48 92 120 54 70 92 120 56 92 120 67 56 92 120 67 70 92 120 53 57 92 120 51 92 120 69 65 92 120 70 55 92 120 48 92 120 53 52 92 120 49 56 92 120 67 54 92 120 66 51 92 120 67 48 92 120 67 48 92 120 50 53 92 120 67 51 92 120 50 57 92 120 51 68 92 120 67 56 92 120 57 55 92 120 69 55 92 120 50 55 92 120 49 51 92 120 67 50 92 120 70 56 92 120 66 69 92 120 57 70 92 120 49 49 92 120 69 55 92 120 66 65 92 120 53 92 120 66 68 92 120 66 54 92 120 70 51 92 120 70 70 92 120 52 56 92 120 54 51 92 120 66 66 92 120 50 55 92 120 54 55 92 120 50 50 92 120 66 57 92 120 55 48 92 120 54 65 92 120 65 51 92 120 68 67 92 120 51 54 92 120 54 66 92 120 65 70 92 120 57 69 92 120 51 92 120 53 69 92 120 66 66 92 120 50 53 92 120 49 65 92 120 67 48 92 120 69 67 92 120 65 57 92 120 56 70 92 120 69 57 92 120 69 56 92 120 65 68 92 120 69 49 92 120 57 57 92 120 68 50 92 120 66 68 92 120 70 53 92 120 54 67 92 120 67 66 92 120 68 57 92 120 53 55 92 120 69 53 92 120 67 52 92 120 70 50 92 120 54 57 92 120 51 65 92 120 66 57 92 120 55 68 92 120 70 69 92 120 69 52 92 120 67 66 92 120 56 53 92 120 55 66 92 120 68 49 92 120 66 66 92 120 53 54 92 120 68 67 92 120 66 69 92 120 65 48 92 120 67 70 92 120 68 49 92 120 67 50 92 120 65 51 92 120 65 49 92 120 68 68 92 120 55 55 92 120 69 70 92 120 55 53 92 120 56 48 92 120 49 51 92 120 55 53 92 120 65 55 92 120 54 48 92 120 70 65 92 120 69 48 92 120 70 55 92 120 53 48 92 120 67 54 92 120 65 52 92 120 48 92 120 49 50 92 120 56 50 92 120 50 68 92 120 49 55 92 120 52 92 120 51 56 92 120 68 65 92 120 49 51 92 120 50 92 120 69 56 92 120 54 66 92 120 49 55 92 120 53 69 92 120 56 66 92 120 55 70 92 120 68 69 92 120 50 70 92 120 68 68 92 120 56 70 92 120 54 67 92 120 51 48 92 120 69 51 92 120 66 92 120 56 51 92 120 68 55 92 120 66 56 92 120 57 51 92 120 53 53 92 120 65 55 92 120 67 67 92 120 52 68 92 120 50 68 92 120 66 57 92 120 53 56 92 120 68 50 92 120 70 56 92 120 70 67 92 120 69 48 92 120 52 53 92 120 49 51 92 120 65 92 120 70 67 92 120 53 92 120 54 53 92 120 57 57 92 120 66 53 92 120 50 66 92 120 67 67 92 120 54 92 120 48 92 120 48root@box:~#
复制代码
damcool 发表于 2014-01-01 14:13
嗨~!现在的年轻人一点点代码调试能力都没有!刚刚找到电脑,看了一下原来的代码只要去掉xargs后面的-i和{} ...

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
17 [报告]
发表于 2014-01-03 09:23 |只看该作者
bikkuri 发表于 2014-01-02 13:22
今天抽了点时间来仔细测试一下这个程序,发现解码的部分还是有问题。
我先把原来的代码拆解为编码和解码两 ...


作了些调整,支持管道输入,移除xargs对兼容性的影响

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
18 [报告]
发表于 2014-01-03 11:52 |只看该作者
这次修改后的程序经反复测试过确实没有问题了!谢谢!

damcool 发表于 2014-01-03 09:23
作了些调整,支持管道输入,移除xargs对兼容性的影响

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
19 [报告]
发表于 2014-01-04 15:35 |只看该作者
本帖最后由 bikkuri 于 2014-01-04 17:45 编辑

刚才在另外一个盒子上测试发现又出问题了!
  1. root@box:~# cat encode.sh
  2. #!/bin/sh
  3. base64encode()
  4. {
  5. awk -v B64="$CODE" '{for(i=1;i<=NF;i+=3){t=0;t=$i*256*256+$(i+1)*256+$(i+2);for(j=3;j>=0;j--){c=(i+2-j<=NF)?substr(B64,int(t/2^(6*j))+1,1):"=";printf("%c",c);t%=2^(6*j);if (++k==76) printf"\n";k%=76}}}'
  6. }
  7. CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  8. base64encode
  9. root@box:~# cat decode.sh
  10. #!/bin/sh
  11. function base64decode()
  12. {
  13. local buff=""
  14. for buff in $(cat < "$FNAME"|awk -v B64="$CODE" '{while(length()){split(substr($0,1,4),a,"");$0=substr($0,5);t=0;for(i=3;i>=0;i--) t=t+2^(6*i)*((a[4-i]=="=")?0:index(B64,a[4-i])-1);for (i=2;i>=0;i--) if (a[4-i]!="="){printf("\\x%x",t/2^(8*i));t=t%2^(8*i)}}printf"\n"}');do printf "$buff"; done
  15. }
  16. CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  17. base64decode
  18. root@box:~# echo Hello > a
  19. root@box:~# gzip -c a > a.gz
  20. root@box:~# cat a.gz|./encode.sh > a.64
  21. root@box:~# ls -l
  22. -rw-r--r--    1 root     root             6 Jan  4 17:43 a
  23. -rw-r--r--    1 root     root             0 Jan  4 17:43 a.64
  24. -rw-r--r--    1 root     root            26 Jan  4 17:35 a.gz
  25. -rwxr-xr-x    1 root     root           432 Jan  4 17:41 decode.sh
  26. -rwxr-xr-x    1 root     root           318 Jan  4 09:38 encode.sh
  27. root@box:~#
复制代码
后来发现这个盒子上的awk不支持^操作:

  1. BusyBox v1.21.0 (2013-07-24 06:59:49 CEST) built-in shell (ash)
  2. root@jinx:/tmp# awk 'BEGIN{printf("%i\n",5^2)}'
  3. 25
  4. root@jinx:/tmp# awk 'BEGIN{printf("%i\n",5*2)}'
  5. 10
  6. root@jinx:/tmp#

  7. BusyBox v1.21.0 (2013-07-24 09:01:48 CEST) built-in shell (ash)
  8. root@box:~# awk 'BEGIN{printf("%i\n",5^2)}'
  9. root@box:~# awk 'BEGIN{printf("%i\n",5*2)}'
  10. 10
  11. root@box:~# awk --version
  12. awk: invalid option -- -
  13. root@box:~# awk -version
  14. root@box:~# which awk
  15. /usr/bin/awk
  16. root@box:~# ls -l /usr/bin/awk
  17. lrwxrwxrwx    1 root     root            17 Jul 24 07:03 /usr/bin/awk -> ../../bin/busybox
  18. root@box:~#
  19. root@box:~#
复制代码
真是太奇怪了,两个盒子的busybox的版本号都一样啊!
真是郁闷啊!damcool大神还能修改一下您的代码支持这个盒子吗?

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
20 [报告]
发表于 2014-01-05 08:42 |只看该作者
bikkuri 发表于 2014-01-04 15:35
刚才在另外一个盒子上测试发现又出问题了!后来发现这个盒子上的awk不支持^操作:真是太奇怪了,两个盒子的 ...


请善用搜索引擎和自己的大脑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP