Linux 特殊变量使用

变量简介

$?  表示上一个命令退出的状态码  

$$  表示当前进程编号

$0 表示当前脚本名称

$n 表示n位置的输入参数(n代表数字,n>=1)

$# 表示参数的个数,常用于循环

$*和$@ 都表示参数列表 

变量展示:

   例一

     定义一个脚本

#!/bin/bash
echo '$$:查看进程号'
echo $$

echo '$?:返回上个进程执行的状态,0为正确,正数是错误'
echo $?

echo '$0:返回脚本的名称'
echo $0

echo '$n #查看脚本参数'
echo $n

echo '$# #参数个数'
echo $#

echo '$* #所有的参数'
echo $*

echo '$@ #所有的参数'
echo $@

执行结果

   例二   

#!/bin/bash
echo "test var"
echo $$
echo $0
echo $1
echo $2
echo $#
echo $*
echo $@
echo $?

执行结果

注意:

echo $1 与 echo10

当脚本中存在 echo $1  echo$10 这两个参数的时候

当第一个参数(echo $1)传入aa的时候,echo $10输出会变成 aa0 等于$1+0,

所以想有第十个参数  需要这么写: echo${10}

$*与$@的区别

#!/bin/bash
echo --------------------
for a in $*
do echo $a
done
echo --------------------
for b in $@
do echo $b
done
echo --------------------
for a in "$*"
do echo $a
done
echo --------------------
for b in "$@"
do echo $b
done

 执行结果

$* 和 $@ 都表示传递给函数或脚本的所有参数

不被双引号" "包含时,$* 和 $@ 都以$1  $2  … $n 的形式组成参数列表

当它们被双引号" "包含时 

"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式组成一个整串;

"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式组成一个参数列表。

### OAuth2 登录时出现 'Full authentication is required to access this resource' 的解决方案 当遇到 `Full authentication is required to access this resource` 错误时,通常是因为 Spring Security 或者 OAuth2 配置不正确导致的认证失败。以下是详细的分析和解决方法: #### 1. **检查依赖配置** 确保项目的 Maven 或 Gradle 文件中包含了必要的依赖项。如果缺少某些核心库可能导致认证流程异常中断。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.security.oauth.boot</groupId> <artifactId>spring-security-oauth2-autoconfigure</artifactId> </dependency> ``` 上述依赖对于实现基于 OAuth2 的安全机制至关重要[^3]。 --- #### 2. **Spring Security 和 OAuth2 配置文件调整** 在应用启动类或者配置类中,需确认已正确定义了 WebSecurityConfigurerAdapter 并允许特定路径无需身份验证即可访问。例如,在开发阶段可以开放 `/oauth/token` 接口供外部调用。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/oauth/token").permitAll() // 允许 /oauth/token 不受保护 .anyRequest().authenticated(); http.csrf().disable(); // 如果不需要 CSRF,则禁用它以简化调试过程 } } ``` 此设置可防止初次请求因未完成的身份验证而被拒绝[^2]。 --- #### 3. **Token 请求头缺失问题排查** 部分情况下,客户端发送 POST 请求至 `/oauth/token` 时忘记携带 Basic Auth 认证信息(即 client_id 和 client_secret)。这会触发服务器端的安全拦截器抛出 `Unauthorized` 响应码。 建议通过工具如 Postman 测试 API 是否正常工作,并按照以下方式构建 HTTP Header 参数: - Authorization: Basic base64(client_id:client_secret) 其中 Base64 编码后的字符串可以通过 Python 实现快速转换: ```python import base64 credentials = f"your_client_id:your_client_secret" encoded_credentials = base64.b64encode(credentials.encode()).decode() print(encoded_credentials) ``` 随后将其作为 Value 设置到 Request Headers 中[^4]。 --- #### 4. **Session 管理冲突处理** 有时由于 Session Cookie 存储不当也会引发重复登录现象。尝试修改 sessionManagement 方法来强制每次新连接都创建独立会话实例。 ```java @Override protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS); super.configure(http); } ``` 以上代码片段表明应用程序不会保存任何状态数据于服务端内存里,从而规避潜在风险[^1]。 --- #### 5. **日志级别提升辅助诊断** 为了更精准定位具体环节中的错误源头,临时提高框架的日志记录等级有助于收集更多上下文线索。 编辑 application.properties 添加如下内容: ```properties logging.level.org.springframework.security=DEBUG logging.level.org.apache.tomcat.util.http=FINEST ``` 启用这些选项后重新运行程序并观察控制台输出变化情况。 --- ### 总结 综合考虑以上几点因素逐一排除干扰源直至恢复正常运作为止。最终目的是让整个授权链条顺畅衔接无阻塞点存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值