【Linux】编写一个 shell 脚本&执行

在Linux中编写和执行脚本相对简单。下面是一个基本的步骤指南,帮助你创建一个简单的bash脚本并运行它:

1. 创建脚本文件

首先,你需要使用文本编辑器创建一个新的文件。这个文件通常会有 .sh 的扩展名,以表明它是一个shell脚本。例如,你可以创建一个名为 myscript.sh 的文件。

打开终端,并输入以下命令:

vim myscript.sh

这里使用了 vim 编辑器,但你也可以使用其他你喜欢的编辑器,比如 nano,emacs 等。

2. 编写脚本内容

在编辑器中,输入你想要脚本执行的命令。例如,下面是一个简单的bash脚本,它会在终端中打印出 “xiaoming”:

ps: 第一行 #!/bin/bash 是一个特殊的shebang行,它告诉系统使用哪个解释器来执行这个脚本。在这个例子中,我们使用的是bash shell。

#!/bin/bash
NAME_ID="xiaoming"

echo "变量 NAME_ID 的值为: $NAME_ID"

if [ $? = 0 ]; then  
    echo "******************* shell 脚本执行完成 ******************"  
    exit 0 
else  
     echo "!!!!!!!!!!!!!!!!! [error: 执行失败!] !!!!!!!!!!!!!!!!!!!" 
     exit 1
fi
3. 保存并退出编辑器

如果你使用的是 vim 编辑器,你可以按 Esc + :wq 保存文件,退出编辑器保存文件。其他编辑器的保存和退出命令可能会有所不同。

4. 为脚本添加执行权限

在Linux中,你需要为脚本文件添加执行权限,才能运行它。你可以使用 chmod 命令来添加权限:

chmod +x myscript.sh

这会给 myscript.sh 文件添加执行权限。

5. 运行脚本

现在你可以运行你的脚本了。在终端中输入以下命令:

./myscript.sh

如果一切正常,你应该会在终端中看到 “xiaoming” 的输出。

这就是在Linux中编写和执行脚本的基本步骤。当然,你可以编写更复杂的脚本,包含条件语句、循环、函数等,以实现更复杂的任务。

6.扩展: 上面提供的脚
  1. 首先,$? 变量用于获取上一个命令的退出状态。在您的脚本中,echo "变量 NAME_ID 的值为: $NAME_ID"
  2. 总是成功执行的,因此 $? 将会是 0if [ "$?" = "0" ];then表示成功) 。
  3. 但是,如果您想要模拟脚本执行失败的场景并处理错误,需要在脚本中故意引入一个失败的命令。
  4. 下面是一个修改后的脚本,它会在打印变量值后输出一个成功消息,并演示了如何检查一个故意失败的命令:
#!/bin/bash
NAME_ID="xiaoming"

echo "变量 NAME_ID 的值为: $NAME_ID"

false_command_example

if [ $? -ne 0 ]; then  
    echo "!!!!!!!!!!!!!!!!!!!!!               [error: 执行失败!] 原因可能是:          !!!!!!!!!!!!!!!!!!!!!!!" 
    echo "!!!!!!!!!!!!!!!!!!!!! 1. 某个命令执行失败,比如上面的 false_command_example !!!!!!!!!!!!!!!!!!!!!!!!!" 
    exit 1  
else  
    echo "******************* shell 脚本执行完成 ******************"  

在这个脚本中,false_command_example 是一个不存在的命令,因此它会失败,并且 $? 将不会是 0。然后 if 语句会捕获到这个失败,并输出一个错误消息。

<think>好的,我现在需要帮助用户解决关于Android中公共跳转页面实现方法或最佳实践的问题。用户之前已经问过相关问题,现在需要更详细的指导。首先,我得回忆一下用户提到的引用内容,虽然引用中的例子是关于Activity跳转的基本方法,但用户现在想要的是公共跳转页面的通用方案,可能需要更结构化的设计。 首先,公共跳转页面通常是为了避免在各个Activity中重复编写跳转代码,所以应该考虑封装跳转逻辑。常见的做法是创建一个工具类,比如IntentUtil,里面封装生成Intent的方法。这样可以统一处理参数传递和跳转逻辑,减少代码冗余。同时,用户可能需要处理不同类型的跳转,比如普通跳转、带返回结果的跳转,甚至可能涉及Fragment之间的跳转,所以工具类需要覆盖这些情况。 另外,用户可能希望跳转时参数传递更方便,比如使用Bundle或者直接通过方法参数传递。这时候可以考虑使用高阶函数或扩展函数来简化参数设置。例如,Kotlin的扩展函数可以让代码更简洁,比如在Intent类上扩展一个put方法,链式调用添加参数。 接下来,路由框架也是一个重要的点。第三方库如ARouter可以帮助管理复杂的跳转逻辑,支持URL路由、参数自动注入、拦截器等功能。这对于大型项目尤其有用,能够解耦模块,方便动态配置。需要解释ARouter的基本用法,包括注解、初始化以及跳转示例。 然后,统一跳转协议可能也是用户需要的。通过定义自定义的URI Scheme,可以实现统一的跳转处理,比如从H5页面或推送消息跳转到特定Activity。这时候需要一个统一的Activity或IntentFilter来解析URI,并根据参数分发跳转。需要举例说明如何注册IntentFilter,以及如何解析参数。 另外,考虑用户提到的引用中关于onActivityResult和setResult的内容,可能需要说明在公共跳转方案中如何处理带返回结果的跳转,比如封装startActivityForResult的方法,并在工具类中处理回调。不过这部分可能比较复杂,特别是回调的管理,可能需要结合Activity Result API来简化。 还需要考虑安全性,比如防止其他应用调用内部的Activity,可以通过设置exported属性为false,或者在跳转时校验权限。此外,参数的类型安全也很重要,避免传递不支持的类型导致崩溃。 最后,总结最佳实践时,需要分点说明,从工具类封装到路由框架,再到统一协议,逐步提升方案的复杂度和适用场景。同时,要提供代码示例,比如Java和Kotlin的对比,特别是用户之前提到的Kotlin实现,可能需要展示如何用Kotlin扩展函数简化代码。 在生成相关问题的时候,需要围绕用户的问题扩展,比如如何传递复杂数据、路由框架的选择、如何处理回调、安全性等,这些都是用户可能进一步询问的方向。</think>### Android 公共跳转页面实现方案与最佳实践 #### 一、基础封装:工具类统一管理跳转逻辑 通过封装`IntentUtil`工具类实现跳转逻辑复用,支持**参数类型安全校验**和**多场景跳转**: ```java // Java 示例 public class IntentUtil { public static void startActivity(Context context, Class<?> target, Bundle bundle) { Intent intent = new Intent(context, target); if (bundle != null) { intent.putExtras(bundle); } context.startActivity(intent); } // 带回调的跳转 public static void startActivityForResult(Activity activity, Class<?> target, int requestCode) { Intent intent = new Intent(activity, target); activity.startActivityForResult(intent, requestCode); } } // Kotlin 扩展函数优化 fun Context.jumpTo(clazz: Class<*>, bundle: Bundle? = null) { Intent(this, clazz).apply { bundle?.let { putExtras(it) } startActivity(this) } } ``` #### 二、路由框架实现(推荐ARouter) 阿里巴巴开源路由框架**ARouter**可实现**模块解耦**与**动态路由**,支持: - 注解自动生成路由表 - 跨模块跳转 - 拦截器机制 - 参数自动注入 ```kotlin // 1. 初始化(Application中) ARouter.init(application) // 2. 声明路由路径 @Route(path = "/app/MainActivity") class MainActivity : AppCompatActivity() // 3. 发起跳转 ARouter.getInstance() .build("/app/DetailActivity") .withString("key", "value") .navigation() ``` #### 三、统一跳转协议设计 通过自定义URI Scheme实现**全平台统一跳转入口**,适配H5/推送/第三方调用场景: ```xml <!-- AndroidManifest.xml --> <activity android:name=".RouterActivity"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="myapp" android:host="router"/> </intent-filter> </activity> ``` ```java // 路由分发逻辑 protected void onCreate(Bundle savedInstanceState) { Uri uri = getIntent().getData(); if(uri != null) { String path = uri.getQueryParameter("path"); switch(path) { case "detail": ARouter.getInstance().build("/app/DetailActivity").navigation(); break; // 其他路由分支 } } finish(); // 关闭路由页 } ``` #### 四、最佳实践建议 1. **安全性控制**: - 设置`android:exported="false"`限制外部调用 - 关键页面添加权限校验 ```xml <activity android:name=".PayActivity" android:exported="false" android:permission="com.example.PAY_PERMISSION"/> ``` 2. **参数传递规范**: - 使用`Parcelable`代替`Serializable`提升性能 - 复杂数据建议通过ViewModel共享 3. **跳转动画统一**: ```java // styles.xml 定义全局动画 <style name="ActivityAnimation"> <item name="android:windowEnterAnimation">@anim/slide_in_right</item> <item name="android:windowExitAnimation">@anim/slide_out_left</item> </style> ``` [^1]: 基础跳转实现参考Intent标准用法 [^2]: Kotlin扩展函数优化代码结构
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值