1.概述

Shell 既是一个连接用户和 Linux 内核的程序,又是一门管理 Linux 系统的脚本语言,shell 脚本类似 windows 的批处理文件,shell 脚本就是将连续执行的命令写成一个文件。 shell 脚本提供数组、循环、条件判断等功能

2.文件保存并退出

1、在vi命令下,先按键盘esc键,再按(英文冒号)
2、输入"wq"
3、回车即可保存并退出vi命令,回到主shell界面

3.进入编辑模式

进入到目录下 vi +文件名称
如果是system下的文件需要先remount
mount -o rw,remount /system
然后 busybox vi +文件名称

4.shell脚本基本命令

echo 命令
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。输出字符串时,可以省略掉引号。
echo命令默认在末尾添加换行符。

printf 命令
printf 命令模仿 C 程序库(library)里的 printf() 程序。标准所定义,因此使用printf的脚本比使用echo移植性好。
printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认printf不会像
echo 自动添加换行符,我们可以手动添加 \n

test命令
shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试

-eq 等于则为真

-ne 不等于则为真

-gt 大于则为真

-ge 大于等于则为真

-lt 小于则为真

-le 小于等于则为真

注意脚本中不要出现;特殊字符
#!/system/bin/sh
m=30
echo "打印变量赋值"
echo "m=$m"
echo "第一种for循环方式"
for i in $(seq 1 10)
do echo "i=$i"
done
echo "第二种for循环方式"
for j in `seq 1 10`
do echo "j=$j"
done
echo "-eq相等,-ne不等,-gt大于,-lt小于,-ge大于等于,-le小于等于"
echo "while循环1 ge大于0"
a=5
while [ $a -ge 0 ]
do echo "a=$a"
a=$a-1
done
echo "while循环2 gt小于5"
a=0
while [ $a -lt 5 ]
do echo "a=$a"
a=$a+1
done
for k in `seq 1 10`
do echo "k=$k"
if [ $k -ge 3 ]
then echo "超编停止"
break
else echo "继续"
fi
done
systemmode=$(getprop "ro.product.system.model")
echo "mode:$systemmode"
echo "data:$(date "+%Y%m%d%H%M%S")"
echo "data1:$(date "+%Y-%m-%d %H:%M:%S")"
echo "data2:$(date "+%Y.%m.%d %H:%M:%S")"
echo "你输入的数字为:"
read num
echo "number=$num"
case $num in1)  echo '你选择了 1';;2)  echo '你选择了 2';;3)  echo '你选择了 3';;4)  echo '你选择了 4';;*)  echo '你没有输入 1 到 4 之间的数字';;
esac
a="abc"
b="efg"
if [ $a != $b ]
thenecho "$a != $b : a 等于 b"
elseecho "$a != $b: a 不等于 b"
fi
number=1
while(( $number<=5 ))
doecho "number=$number"let "number++"
done
echo '按下 <Q> 退出'
echo -n '输入你最喜欢的歌名: '
while read SONG
doif [ $SONG != "3" ]thenecho "退出"breakelse echo "啊!$SONG 真是一首好歌"fi
done
FunReturn(){echo "两个数字进行相加运算..."echo "输入第一个数字: "read numecho "输入第二个数字: "read anothernumecho "两个数字分别为 $num 和 $anothernum !"return $(($num+$anothernum)) #分别返回数值
}
FunReturn       # 调用函数
echo "输入的两个数字之和为 $? !" #使用通配符获取上一条指令的返回值
FunParam(){echo "输入第一个参数 $1 !"echo "输入第二个参数 $2 !"echo "输入第十个个参数 $10 !"echo "参数总数共 $# 个!"echo "作为一个字符串输出所有参数 $* !"
}
FunParam 1 2 3 4 5 6 7 8 9 10

5.vim 相关编辑操作

vim 编辑器有两种操作模式:

普通模式
当你刚打开要编辑的文件时(或新建一个文件时),vim 编辑器会进入普通模式。在普通模式中,vim 编辑器会将按键解释成命令插入模式
在插入模式下,vim 会将你在当前光标位置输入的每个键都插入到缓冲区。按下i键就可以进入插入模式。要退出插入模式回到普通模式,按下键盘上的退出键(Esc 键,也就是 Escape 键)就可以了。

在普通模式中,可以用方向键在文本区域移动光标(只要 vim 能正确识别你的终端类型)。如果你恰巧在一个古怪的没有定义方向键的终端连接上,也不是完全没有希望。vim 中有用来移动光标的命令。

h:左移一个字符
j:下移一行(文本中的下一行)
k:上移一行(文本中的上一行)
l:右移一个字符

在大的文本文件中一行一行地来回移动会特别麻烦,幸而 vim 提供了一些能够提高移动速度的命令。

PageDown(或Ctrl+F):下翻一屏
PageUp(或Ctrl+B):上翻一屏
G:移到缓冲区的最后一行
num G:移动到缓冲区中的第num行
gg:移到缓冲区的第一行

vim 编辑器在普通模式下有个特殊的功能模式叫命令行模式。命令行模式提供了一个交互式命令行,可以输入额外的命令来控制vim 的行为。要进入命令行模式,在普通模式下按下冒号键
光标会移动到消息行,然后出现冒号,等待输入命令。
在命令行模式下有几个命令可以将缓冲区的数据保存到文件中并退出 vim。

q:如果未修改缓冲区数据,退出
q!:取消所有对缓冲区数据的修改并退出
w filename:将文件保存到另一个文件中
wq:将缓冲区数据保存到文件中并退出

6.执行shell脚本传参的案例


vim test01.sh#!/bin/bash
for i in a b c d e f g h i j k; do
sh /tmp/li_tmp/shell/test02.sh $i
donesh 执行脚本 带参数vim test02.sh#!/bin/bash
sql="select * from $1;"
echo "$sql"sh test01.shselect * from a;
select * from b;
select * from c;
select * from d;
select * from e;
select * from f;
select * from g;
select * from h;
select * from i;
select * from j;
select * from k;

7.脚本编辑条件判断

字符串判断

str1 = str2      当两个串有相同内容、长度时为真
str1 != str2      当串str1和str2不等时为真
-n str1        当串的长度大于0时为真(串非空)
-z str1        当串的长度为0时为真(空串)
str1         当串str1为非空时为真
\ > \ < 比较大小的时候 可以使用大于号,小于号,但是需转义。例如 [ “2006.01.23” > “2005.03.01” ] && echo dayu || echo budayu
数字的判断

int1 -eq int2    两数相等为真
int1 -ne int2    两数不等为真
int1 -gt int2    int1大于int2为真
int1 -ge int2    int1大于等于int2为真
int1 -lt int2    int1小于int2为真
int1 -le int2    int1小于等于int2为真
文件的判断

-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真
复杂逻辑判断

-a         与
-o        或
!        非

上面的三种写在括号内,对应的 && || 写在中括号之间。

例如,if  [   "$a"  eq   1  -o  "$b" eq 2 ]  &&  [   "$c"  eq  3 ]字符串匹配if [  `echo $str | grep -e regexp`  ];then .数字的样例:#!/bin/sh
var_1=$1
var_2=$2
echo "var_1=${var_1}"
echo "var_2=${var_2}"
if [ ${var_2} -eq ${var_1} ] ; thenecho "var_2:{$var_2} == var_1:{$var_1}"
elif [ ${var_2} -gt ${var_1} ] ; thenecho "var_2:{$var_2} > var_1:{$var_1}"
elseecho "var_2:{$var_2} < var_1:{$var_1}"
fi./test.sh 10 10var_1=10
var_2=10
var_2:{10} == var_1:{10}字符串的样例:#!/bin/shvar_1=$1
var_2=$2echo "var_1=${var_1}"
echo "var_2=${var_2}"if [ ${var_2} = ${var_1} ] ; thenecho "var_2:{$var_2} == var_1:{$var_1}"
fi./test.sh a avar_1=a
var_2=a
var_2:{a} == var_1:{a}

case语句:

第一种:
case分支语句的格式如下:

case $变量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认执行的命令序列
;;
esac

例如:case $(uname -s) inDarwin)ANDROID_EMULATOR_PREBUILTS=$T/prebuilts/android-emulator/darwin-x86_64;;Linux)ANDROID_EMULATOR_PREBUILTS=$T/prebuilts/android-emulator/linux-x86_64;;*)ANDROID_EMULATOR_PREBUILTS=;;esacDemo:#!/bin/sh
var_1=$1
echo "var_1=${var_1}"
case $var_1 inuser)echo "var_1 is user";;eng)echo "var_1 is eng";;userdebug)echo "var_1 is userdebug";;*)echo "var_1 is not one of (user,eng,userdebug)";;
esac

循环:

形式一:

while …; do

done

形式二:

for var in …; do

done

for i in {1…6};
do
echo $i
done

1
2
3
4

8.Shell脚本编程需要注意事项

1.shell脚本名称命名一般为英文的大写,小写;不能用特殊符号,空格来命名;一般以脚本功能命名。

2.shell脚本后缀以.sh结尾

3.shell脚本内容首行需以#!/bin/bash开头

4.shell脚本中变量名称尽量使用大写字母,字母间不能使用“-“,可以使用”_“; 不能以数字,特殊符号开头

结构:声明-注释-代码

功能:接收参数;处理参数

示例:使用vim编写一个shell脚本

[root@007 桌面]# echo $SHELL    <==查看SHELL变量,发现当前系统默认使用Bash作为命令解释器/bin/bash[root@007 桌面]# vim fist_shell.sh   <==使用vim编写脚本[root@007 桌面]# cat fist_shell.sh#!/bin/bash                    <==脚本声明,定义该脚本所使用的shell类型#This is my Fisrt shell            <==#表示注释,没实际意义,shell不会去解析它#By author Nick.net 2019        <==脚本创建人echo "Hello World!!!"            <==shell脚本主命令执行该脚本呈现的内容[root@007 桌面]# bash fist_shell.sh          <==bash直接执行脚本Hello World!!![root@007 桌面]# ./fist_shell.sh             <==输入路径执行脚本bash: ./fist_shell.sh: 权限不够[root@007 桌面]# chmod o+x fist_shell.sh    <==赋予脚本可执行权限[root@007 桌面]# ./fist_shell.shHello World!!![root@007 ]# /bin/sh fist_shell.sh       <==通过/bin/sh直接执行,不需要执行权限Hello World!!!

Shell 脚本进入编辑模式和保存退出相关推荐

  1. Linux下vi命令编辑器怎样编辑,怎样保存退出

    摘要 博主在倒腾服务器配置禅道时遇到的问题,Linux下vi命令编辑器怎样编辑,怎样保存退出,liunx这玩应真的是一段时间不用全忘完. 方法/步骤 vi 文件名,接着按回车即可打开对应的文件,如果没 ...

  2. linux 进入编辑文件,保存退出相关命令

    linux 进入编辑文件,保存退出相关命令 1.进入文件 vim 文件名(vim test.xml) 2.编辑完成之后,按ESC键 跳到命令模式(命令前面冒号是必要的): :w 保存文件但不退出vi ...

  3. Linux 中启用 Shell 脚本的调试模式

    shell 脚本调试系列 Linux 中启用 Shell 脚本的调试模式 在 Shell 脚本中执行语法检查调试模式 在 Shell 脚本中跟踪调试命令的执行 概述 脚本是存储在一个文件的一系列命令. ...

  4. Vi编辑文件无法保存退出的解决方法

    Vi编辑文件无法保存退出的解决方法 问题:在xshell下用vi Test.scala编辑完文件后却无法保存退出,如下 在这里插入图片描述 原因:没有具备root权限 解决方法: 第一种::w!!直接 ...

  5. VsCode编辑器之shell脚本的编辑

    VsCode编辑宇宙之shell脚本的编辑 背景介绍 长期从事.Net开发,一直使用宇宙第一IDE Visual studio系列,VsCode的横空出世,让我又多了一个非常完美的选择,vscode从 ...

  6. 【shell脚本创建编辑文件,读取文件】

    文章目录 一.什么是shell? 二.通过命令创建.编辑.读取文件 1.创建文件 2.编辑文件 3.读取文件 总结 一.什么是shell? Shell 是指一种应用程序,这个应用程序提供了一个界面,用 ...

  7. linux vim可视模式、末行模式、保存退出快捷操作

    可视模式 按方向键也可以实现选中: 文本模式编辑 AIOS aios 末行模式 跳转到第10行 替换当前行的字符串 :s/tom/jack/g 替换所有的目标字符串 :%s/tom/jack/g#不加 ...

  8. Vim编辑完如何保存退出

    编辑完成后进行如下操作 按键盘Esc键退出编辑模式后输入: +(指令) +回车Enter :wq 保存后退出 :wq! 强制保存后退出 :w 保存但不退出 :q 不保存并退出 :q! 不保存并强制退出

  9. Vi编辑完如何保存退出

    编辑完按Esc退出编辑模式此时输入: :wq 保存后退出 :wq! 强制保存后退出 :w 保存但不退出 :w! 若文件属性为只读时,强制写入该文档 :q 不保存并退出 :q! 不保存并强制退出 强调: ...

最新文章

  1. Silicon Labs收购业界RTOS厂商
  2. 武汉东方7神话服饰有限公司
  3. java io nio socket_通过socket编程掌握IO流 —— NIO
  4. python连通域标记_图像分析:二值图像连通域标记
  5. 程序员节,10月24日!
  6. 状态目标bfs+哈希表 + 三杯水
  7. 我用过 | Keil的发展历史
  8. Unity 导出切片精灵
  9. 小白爬虫第一弹之抓取妹子图【更新版】
  10. python点击按钮弹出新窗口_PyQt5点击button如何弹出新窗口?
  11. python爬虫有道词典_Python爬取有道词典,有道的反爬很难吗?也就这样啊!
  12. 分享小记:指数族分布
  13. Burp Suite详细使用教程-Intruder模块详3
  14. 中考计算机表格操作题,中考信息技术Excel操作题.xls
  15. 中南大学计算机学院羽毛球赛,我校第四届“四海一家亲”羽毛球邀请赛成功举行...
  16. Mahony 互补滤波
  17. 大数据概述及电信大数据应用
  18. 在互联网创业公司工作五年是一种怎样的体验?
  19. c 语言运算符号大全,c语言关系运算符号有哪些?
  20. Java高级阶段考试题库

热门文章

  1. iqooneo3 如何不用vivo账号下载外部应用_vivo新推黄金会员九折特权,快来看看你可以省多少?...
  2. c++程序设计笔记(4)
  3. ubuntu 死机(不强制关机)
  4. MIT6.828 32位操作系统笔记(3)----系统的启动和初始化
  5. hive获取某日期是今年第几天
  6. 华为笔记本键盘说明图_【华为 MateBook 13 笔记本电脑外观细节】LOGO|键盘|屏幕_摘要频道_什么值得买...
  7. 从Web日志还原SQL注入拖走的数据
  8. 新一代“四型机场”,青岛胶东国际机场正式实施转场运营
  9. 购买条码打印机如何选择才能更适合
  10. C# 日期转换AM/PM