shell study-15day--shell函数

1、函数的使用
函数是一个脚本代码块,你可以对它进行自定义命名,并且可以在脚本中任意位置使用这个函数,要使用这个函数,只要使用这个函数名称就可以了。使用函数的好处:模块化,代码可读性强。
(1)函数创建语法
方法 1:

function name {
commands
}

注:name 是函数唯一的名称
方法 2:name 后面的括号表示你正在定义一个函数

name(){
commands
}

调用函数语法:
函数名 参数 1 参数 2 …
调用函数时,可以传递参数。在函数中用$1、$2…来引用传递的参数
(2)函数的使用
实例1:

[root@test shell]# vi fun.sh 
#!/bin/bash
function test {
    echo "test function"  
}      #以上内容定义函数
test   #调用函数
[root@test shell]# sh fun.sh 
test function
[root@test shell]# 

注:函数名的使用,如果在一个脚本中定义了重复的函数名,那么以最后一个为准。
举例:

[root@test shell]# sh fun.sh 
test function
[root@test shell]# vi fun.sh 
#!/bin/bash
function test {
    echo "test function one"
}
function test {
    echo "test function two"
}
test
[root@test shell]# sh fun.sh 
test function two
[root@test shell]# 

(3)返回值
使用 return 命令来退出函数并返回特定的退出码。

[root@test shell]# vi fun.sh 
#!/bin/bash
function test {
    echo "test function one"
    ls /home
    return 2
}
test
[root@test shell]# sh fun.sh 
test function one
1.txt  YDSOC_C4I_SYSLOG  YDSOC_C4I_SYSLOG_20201009.tar.gz  aa  bb  cc  client111.crt  client111.csr  client111.key  test1
[root@test shell]# echo $?

2 #返回值,为指定返回值
注:状态码的确定必需要在函数一结束就运行 return 返回值;状态码的取值范围(0~255)。

[root@test shell]# vi fun.sh 
#!/bin/bash
function test {
    echo "test function one"
    ls /home
    return 2
    ls /root
}
test
[root@test shell]# sh fun.sh 
test function one
1.txt  YDSOC_C4I_SYSLOG  YDSOC_C4I_SYSLOG_20201009.tar.gz  aa  bb  cc  client111.crt  client111.csr  client111.key  test1
[root@test shell]# echo $?
2
[root@test shell]# 

注:return 只是在函数最后添加一行,然后返回数字,只能让函数后面的命令不执行,无法强制退出整个脚本。exit 整个脚本就直接退出。
(4)将函数赋值给变量
函数名相当于一个命令。

[root@test shell]# cat fun.sh 
#!/bin/bash
function test {
    read -p "输入一个整数:" int
        echo $[ $int+1 ]
}

sum=$(test)
echo "result is $sum"
[root@test shell]# sh fun.sh 
输入一个整数:1
result is 2
[root@test shell]# 

(5)函数参数传递
实例1:通过脚本传递参数给函数中的位置参数$1
[root@test shell]# cat fun.sh

#!/bin/bash
function test {
        rm -rf $1
}
test $1
[root@test shell]# touch 1.txt
[root@test shell]# ls
1.txt  fun.sh
[root@test shell]# sh fun.sh 1.txt 
[root@test shell]# ls
fun.sh
[root@test shell]# 

实例2:调用函数时直接传递参数

[root@test shell]# touch /home/test.txt
[root@test shell]# vi fun.sh 
#!/bin/bash
function test {
        rm -rf $1
}
test /home/test.txt
[root@test shell]# ls /home
test.txt
[root@test shell]# sh fun.sh 
[root@test shell]# ls /home
[root@test shell]# 

实例3:函数中多参数传递

[root@test shell]# vi fun.sh 
#!/bin/bash
function test {
        rm -rf $1
        rm -rf $2
}
test /home/test1 /home/test2
[root@test shell]# touch /home/test{1,2}
[root@test shell]# ls /home
test1  test2
[root@test shell]# sh fun.sh 
[root@test shell]# ls /home
[root@test shell]# 

(6)函数中变量处理
函数使用的变量类型有两种:
局部变量、全局变量。
全局变量,默认情况下,你在脚本中定义的变量都是全局变量,你在函数外面定义的变量在函数内也可以使用。

[root@test shell]# cat fun.sh 
#!/bin/bash
function test {
        num=$[var*2]
}
read -p "input a num:" var
test
echo the new value is: $num
[root@test shell]# sh fun.sh 
input a num:1
the new value is: 2
[root@test shell]# 

个人公众号,微信搜索:linux言叙
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.版本 2 .程序集 HTTP读文件程序集 .程序集变量 程序集_完整网址, 文本型 .程序集变量 程序集_访问方式, 文本型, , , "GET" or "POST",为空默认"GET" .程序集变量 程序集_代理地址, 文本型 .程序集变量 程序集_附加协议头, 文本型 .程序集变量 程序集_页面内容, 字节集 .程序集变量 程序集_线程号, 整数型 .程序集变量 程序集_提交信息, 文本型, , , "POST"专用 .子程序 HTTP读文件字集, 字节集, , 有可能线程阻塞,请在外部加超时判断 .参数 参数_完整网址, 文本型 .参数 参数_访问方式, 文本型, 可空, "GET" or "POST",为空默认"GET" .参数 参数_代理地址, 文本型, 可空 .参数 参数_附加协议头, 文本型, 可空 .参数 参数_提交信息, 文本型, 可空, "POST"专用 .参数 参数_超时值, 整数型, 可空 .局部变量 开始时间, 整数型 程序集_完整网址 = 参数_完整网址 程序集_访问方式 = 参数_访问方式 程序集_代理地址 = 参数_代理地址 程序集_附加协议头 = 参数_附加协议头 程序集_提交信息 = 参数_提交信息 程序集_页面内容 = 取空白字节集 (0) .如果真 (是否为空 (参数_超时值) 或 参数_超时值 = 0) 参数_超时值 = 8 .如果真结束 开始时间 = 取启动时间 () 程序集_线程号 = 创建线程 (0, 0, &子程序_读网页, 0, 0, 程序集_线程号) .判断循环首 (程序集_线程号 > 0) 处理事件 () .如果真 (取启动时间 () - 开始时间 > 参数_超时值 × 1000) 销毁线程 (程序集_线程号, 0) 处理事件 () 程序集_页面内容 = 取空白字节集 (0) 程序集_线程号 = 0 .如果真结束 .判断循环尾 () 返回 (程序集_页面内容) .子程序 子程序_读网页 .局部变量 局部_Internet句柄, 整数型 .局部变量 局部_Internet连接句柄, 整数型 .局部变量 局部_HTTP请求句柄, 整数型 .局部变量 局部_域名, 文本型 .局部变量 局部_页面地址, 文本型 .局部变量 局部_整数变量1, 整数型 .局部变量 局部_整数变量2, 整数型 .局部变量 局部_逻辑变量, 逻辑型 .局部变量 局部_文本变量, 文本型 .局部变量 局部_字节集变量, 字节集 局部_域名 = 子程序_取域名 (程序集_完整网址) 局部_页面地址 = 子程序_取页面地址 (程序集_完整网址) ' 建立基础连接 .如果 (删全部空 (程序集_代理地址) = “”) 局部_Internet句柄 = Internet激活 (到文本 (“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”), 1, “”, “”, 0) .否则 局部_Internet句柄 = Internet激活 (到文本 (“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”), 3, 程序集_代理地址, “”, 0) 输出调试文本 (到文本 (“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”), 3, 到文本 (程序集_代理地址)) .如果结束 .如果真 (局部_Internet句柄 = 0) 程序集_页面内容 = 取空白字节集 (0) 返回 () .如果真结束 局部_Internet连接句柄 = Internet建立连接 (局部_Internet句柄, 局部_域名, 子程序_取端口 (程序集_完整网址), “”, “”, 3, 0, 0) .如果真 (局部_Internet连接句柄 = 0) 程序集_页面内容 = 取空白字节集 (0) 返回 () .如果真结束 局部_HTTP请求句柄 = Http创建请求 (局部_Internet连接句柄, 程序集_访问方式, 到文本 (局部_页面地址), “HTTP/1.1”, 到文本 (“”), 到文本 (“”), 2147483648, 0) .如果真 (局部_HTTP请求句柄 = 0) 程序集_页面内容 = 取空白字节集 (0) 返回 () .如果真结束 ' 补充协议头 .如果真 (寻找文本 (程序集_附加协议头, “Accept: ”, 1, 真) = -1) 程序集_附加协议头 = 程序集_附加协议头 + “Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-sh
这个获取谷歌cookies的源码目前只能获取谷歌8.0以下的版本,源码是别人分享出来的但是由于谷歌自动更新的机制,我刚开始使用的时候,也是一度差点怀疑人生,只能用几个小时,就自己自动升级版本了,然后就去研究8.0以上版本的解密方式,但由于不会java代码,目前还在研究中,这是8.0以上版本的java解密方式:https://github.com/mlkui/chrome-cookie-password-decryption 简单说明一下8.0以上版本的加密方式: 8.0以上版本用的是[color=var(--color-text-primary)  !important]Aes256Gcm加密,解密的key在\Google\Chrome\User Data\Local State这个文件里面, key也是经过winapi里面的DPAPI加密的,需要解密kay之后,才能拿到aes密钥,目前我还在研究怎么解开,希望有解开的大神分享一下,如果我解开了也会分享 这次分享主要是针对那些和我一样没能力的小白 先下载8.0以下版本的谷歌浏览器下载地址:https://www.chromedownloads.net/chrome64win/  目前我用的是6.9 我也是随便找了一个 安装完后,阻断谷歌浏览器更新(这一步非常重要,如果没阻断就会自动更新,重启了谷歌浏览器后,用这个源码就取不到cookies了) 阻断方式我也是百d到的 第一步:右键我的电脑>管理>任务计划程序>任务计划程序库   找到 GoogleUpdate 的两个项目,然后右键禁用,然后在 右键>属性>触发器  将所有触发器的任务删除,两个都操作一遍 第二步:找到文件夹Update位置在:AppData\Local\Google里面 第三步:将Update这个目录给删了,然后在创建一个空的Update 第三步:右键Update>属性>安全>编辑 吧上面的所有组和用户名的SYSTEM权限,全部点拒绝,就是设置所有用户组都不能访问读取和执行这个文件夹 第四步:打开任务管理器>启动 找到GoogleUpdateCore 右键禁用 (我的是win10系统) 然后在重启一下电脑就行了

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值