Android NDK—Vim编辑器与Shell基础

在这里插入图片描述

Vim编辑器

三种工作模式

vim是代码编辑器,可以用颜色或底线等方式来
显示一些特殊的信息。vim有三种工作模式,分别是指令模式(默认模式)编辑模式命令行模式

  • 指令模式(默认模式):可以进行删除、复制、粘贴、创建文件等动作,但是却无法编辑文件内容的。可以使用“上下左右”按键来移动光标。
  • 编辑模式:除了支持默认模式的动作外,还可以编辑。按下i, I, o, O, a, A, r, R等任何一个字母之后才会进入编辑模式;如果在画面的左下方会出现“ INSERTREPLACE的字样,此时才可以进行编辑。按下Esc这个按键即可退出编辑模式,返回默认模式。
  • 命令行模式:在默认模式中,输入 : / ? 三个中的任何一个按钮,就可以将光标移动到最下面那一列。在这个模式当中, 可以提供你“搜寻数据”的动作,而读取、存盘、大量取代字符、离开 vim 、显
    示行号等等的动作则是在此模式中达成的!

三种模式相互切换的关系图:

在这里插入图片描述

简易示例

1、进入指令模式(默认模式),vim t1.c

在这里插入图片描述

t1.c 是文件名,如果当前没有改文件,执行vim后会创建改文件。

如果要退出默认模式,按shift+z+z即可。

2、当进入到默认模式后,按i, I, o, O, a, A, r, R任意字符可进入编辑模式:

在这里插入图片描述

ESC键可退出编辑模式,返回到默认模式。

3、输入: / ?三个中的任何一个按钮就可以进入命名行模式,会在末行出现对应的按钮字符。

在这里插入图片描述

然后输入:wq 可以保存内容并离开vim模式。

在这里插入图片描述

如果需要返回到默认模式,按ESC键即可。

vim快捷键

具体参考:https://www.runoob.com/linux/linux-vim.html

BASH

Shell:一般我们是用图形界面和命令去控制计算机,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),由于安全、复杂、繁琐等原因,用户不能直接接触内核,需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,内核和用户之间就多了一层“中间代理”,Shell 其实就是一种脚本语言,也是一个可以用来连接内核和用户的软件,我们编写完源码后不用编译,直接运行源码即可。

常用的Shellbash由 GNU 组织开发,sh 是 UNIX 上的标准 shell,是第一个流行的 Shell,bash保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。现在sh 已经基本被 bash 代替,bash是sh的扩展补充,但是也有些是不兼容的,大多数情况下区别不大,特殊场景可以使用 bash 代替 sh。

第一个shell脚本

vim t02.sh 创建一个shell脚本文件。

在这里插入图片描述

在指令默认模式后进入vim编辑模式,编写程序。

在这里插入图片描述

第一行,#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,用的是哪种shell,后面的/bin/bash就是指明了解释器的具体位置。 最后一行#是注释。

如果提示E348:No string under cursor,说明没有进入编辑模式,需要按i, I, o, O, a, A, r, R任意字符进入编辑模式,进行编写shell脚本。

最后在命令终端中执行脚本

第一种:/bin/bash t02.sh
第二种:sh t02.sh

在这里插入图片描述

变量

shell语法是弱类型的写法,没有强制要求变量必须显式声明。

注意:变量的等号两边不能有空格

#shell语法类似弱类型语言,基本不用显式定义变量的类型
#定义变量
name="hzw"
age=18
#打印变量,字符串模版方式拼接字符串
echo "name: ${name}; age: ${age}" # 输出

#修改变量值
age=20
echo "name: ${name}; age: ${age}"

字符串的拼接可以用字符串模版,这和其他语言kt是类似的。

变量的删除与只读

alias="菜鸟"

#删除变量 unset关键字
unset alias
echo "alias: ${alias}"

#只读变量 readonly关键字声明
readonly sex=1
sex=0 # 尝试修改,会

如果只读变量中间有修改动作,在输出时报错:

在这里插入图片描述

数组

shell只支持一维数组,不支持多维数组

echo =======数组=========

#创建数组实例
array=(a 2 "bb" d)
#读 下标
echo itme= ${array[0]}
#读取所元素
echo "所有元素:${array[*]}"
echo "所有元素:${array[@]}"
#删除 unset 根据下标
unset array[2]
echo "所有元素:${array[@]}"
#获取数组长度
echo "数组长度:${#array[*]}"
echo 数组长度:${#array[@]}
#数组遍历
for item in  ${array[@]}
do
        echo item=$item
done

#第二种遍历
for (( i=0; i<${#array[@]}; i++ ));
do
        echo i=$i  item=${array[$i]}
done


结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

检测上个命令是否执行成功

echo $?监测上个命令是否执行成功,0则是成功了。

在这里插入图片描述

输出文件内容可以用命令cat xxx.sh

查看脚本的路径

通过$PWD在shell脚本可以获取当前脚本的路径,对写脚本是很有帮助的。


#查看当前脚本的路径
echo pwd: $PWD

结果:

在这里插入图片描述

接收命令执行时的参数

#接收命令执行时的参数
echo 文件名称:$0
echo 第一个参数:$1
echo 第二个参数:$2
  • $0:当前脚本的文件名
  • $n:获取对应的位置的参数

在这里插入图片描述

流程控制语句

if-else

语法:if [...]; then ... ; fi 或者 if ((...));then ... ; fi

(...) 是算术表达式,比如 a > b

如果用条件判断用大括号[...],条件语法必须用字符,如下

  • eq 等于
  • ne 不等于
  • gt 大于
  • ge 大于等于
  • lt 小于
  • le 小于等于
##  if-else
a=10
b=10
c=20

# 一行的写法,每个语句用逗号分隔; []内的语句必须用一个空格分开
if [ $a -eq $b ]; then echo "a 等于 b : 20  "; fi

# 多行的写法,逗号可以省略
if [ $a -eq $b ]
then
        echo "a 等于 b : $b "
fi

多条件if-elif-else

#多条件 if-elif-else 这样用()做为条件判断方式
# if后面必须用空格分开


if (($a>$b))
then
        echo "a 等于 b:true"
elif (($c>$b))
then
        echo "c 大于 b:true"
else
        echo "c 大于 a"
fi

for

语法:for item in item1 item2 ... itemN; do command1; command2… done;

# for一行的写法
for value in 1 2 3 4 5; do echo "var: $value"; done;

# for多行的写法
for value in hello world shell
do
        echo "value:$value"
done

输出:

var: 1
var: 2
var: 3
var: 4
var: 5
value:hello
value:world
value:shell

while

while一般用于执行条件下一系列命令;可用于读取键盘信息。

语法:

while condition
do
    command
done

例子:

# while
d=1
while(($d<=5))
do
        echo "d=$d"
        let "d++" # 自增
done

其中let语法,是用于计算操作语句,比如加减乘除、自增等,变量计算中不需要加上$$来表示变量。

可用于读取键盘信息:

echo 按下ctrl+d退出输入
echo -n "输入名称:"
while read name
do
        echo 名称: $name
done

name作为输入信息的变量,退出键盘输入按ctrl+d可退出,确认输出结果按enter

在这里插入图片描述

无限循环

while true
do
    command
done

或
for (( ; ; ))

until

until语法与while是一样的,只不过条件为false才会执行循环体。

## 注意 until条件为false才会执行循环体,true时则会结束循环
e=1
until ((e>5))
do
        echo "e=$e"
        let "e+=1"
done

结果:

在这里插入图片描述

跳出循环

与其他语言是类似的,跳出循环有:breakcontinue关键字完成。

for var in 1 2 3 4 5 6 7
do
        if ((var==3))
        then
                continue #跳出本轮循环,继续执行后面
        elif ((var==6))
        then
                break #终止循环
        else
                echo "var=$var"
        fi

done

结果:

在这里插入图片描述

case … esac

case ... esac语句与其他语言的switch...case是类似的,其中;;相当于break*相当于default

read s #接收键盘输入的内容
case $s in
        60)
         echo s=$s
        ;;
        70)
        echo s=$s
        ;;
        80)
        echo s=$s
        ;;
        *)
        echo 哈哈不是我
        ;;
esac

结果:

在这里插入图片描述

函数

shell函数语法与js有点类似,通过function声明。

# 定义
function test(){
  echo 第一个参数: $1
  echo 第二个参数:$2
  echo 参数总共有 $# 个

}

# 调用
test 100 hzw

结果:

在这里插入图片描述

处理参数的特殊符号:

在这里插入图片描述

多行注释

https://zhuanlan.zhihu.com/p/54494213

填坑

1、在修改文件中如果报错“readonly” option is set(add ! to override);可以尝试以下方法:

首先确保是在命令行模式下,输入:wq! 强行保存退出。

参考:https://blog.csdn.net/jgm20475/article/details/80381650

2、如果在编辑模式修改了代码,退出时报错:

E325: ATTENTION
Found a swap file by the name “.t02.sh.swp”

输入q退出到终端,通过命令行rm 对应的文件路径可解决。

在这里插入图片描述

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H.ZWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值