Shell编程简介

Shell编程只需要一个能编写代码的文本编辑器和一个能解释执行的脚本解释器即可。
Linux的shell种类很多,主要学习Bash(Bourne Again Shell)

Bourne Shell (/usr/bin/sh 或 /bin/sh)
Bourne Again Shell (/bin/bash)
C Shell (/usr/bin/csh)

首先在Linux中通过vim创建一个test.sh文件,这里的扩展名sh代表shell,可任意写,不影响脚本执行。

#!/bin/bash
echo "Hello World!"

其中 #! 是一个约定标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种shell。
echo命令用于向窗口输出文本。

运行Shell脚本
Shell脚本运行可以有两种方式:

  1. 作为可执行程序(脚本第一行需要写#!指定解释器)

    chmod 777 ./test.sh 表示给文件test.sh读写及可执行权限
    chmod +x ./test.sh 表示将文件改为可执行状态
    Linux文件的权限一般分为 读r:4 写w:2 可执行x:1 无权限-,若赋予某文件权限为 r-x ,即4+1=5

  2. 作为解释器参数(直接运行解释器,脚本第一行不需要指定解释信息)

一、Shell变量

  1. 定义变量
your_name="zhang"

注意变量名和等号之间不能有空格

  1. 使用变量
    使用变量时在变量名前加符号 $ 即可,变量名外可加花括号以便区别。
    echo ${your_name}

  2. 只读变量
    在变量名前使用readonly可以将变量定义为只读变量,只读变量的值不能被改变

#!/bin/bash
your_name="zhang"
readonly your_name
echo ${your_name}
  1. 删除变量
    使用unset命令可以删除变量,但不能删除只读变量
unset your_name

二、Shell字符串

字符串可以用单引号、双引号,或不用引号

  1. 单引号
    单引号字符中的任何字符都会原样输出,单引号字符串中的变量无效
  2. 双引号
    双引号字符串里可以有变量,可以出现转义字符\
  3. 拼接字符串
  4. 获取字符串长度
    在变量名前加 #
str="runoob"
echo ${#str}

输出结果为 6

  1. 提取子字符串
    获取字符串中索引值为1到3的字符
your_name="zhang"
echo ${your_name:1:3}

输出结果为 han

  1. 查找子字符串
    查找字符i或o的位置(哪个字母先出现就计算哪个)
string="runoob is a great site"
echo `expr index "$string" io` #输出4

注意:这里代码中的 ` 是反引号,位于ESC键下面

三、Shell数组

支持一维数组,不支持多维数组,且不限定数组大小。数组元素下标从0开始,获取数组中元素要利用下标。

  1. 定义数组
    定义数组用圆括号将数组元素括起,每个数组元素以空格分隔
arr1=("aa" "bb")

可以单独定义数组的各个分量,此时可以使用不连续的坐标,且下标的范围没有限制

arr1=("aa" "bb")
arr1[3]="cc"
  1. 读取数组
    读取数组元素的格式为 ${数组名[下标]}
    下标使用 @ 或者 * 可以读取数组全部元素
arr1=("aa" "bb")
arr1[3]="cc"
echo ${arr1[0]} #输出 aa
echo ${arr1[2]} #不会有输出,因为下标2没有元素值
echo ${arr1[3]} #输出 cc
echo ${arr1[@]} #输出 aa bb cc
echo ${arr1[*]} #输出 aa bb cc
  1. 获取数组的长度
length=${#arr1[@]} #取得数组长度
length=${#arr1[*]} #取得数组长度
length=${#arr1[1]} #取得数组下标为1的元素的长度

四、Shell注释

# 开头即为注释
多行注释可通过以下方式

:<<EOF
注释内容
...
EOF

EOF可以用其他符号代替

:<<!
注释内容
!

五、Shell传递参数

执行Shell脚本时传入参数 ,脚本中获取一般参数的格式为 $n ,n为数字,1代表第一个参数,2代表第二个参数…
0代表执行的脚本的文件名

#!/bin/bash
echo "file name $0"
echo "first: $1"
echo "second $2"

执行脚本

./test2.sh fir sec

则输出为

六、Shell基本运算符

Shell运算符主要分为 算术运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符。

  1. 算术运算符
    注意 ①表达式和运算符之间要有空格 ,如 $a + $b 而不能写成 a+a+a+b
    ②表达式要用反引号包含,在ESC键下边
#!/bin/bash
a=10
b=20
res=`expr $a - $b`
echo ${res}res=`expr $a + $b`
echo ${res}res=`expr $a \* $b` # *前需要加转义符
echo ${res}res=`expr $b / $a`
echo ${res}res=`expr $b % $a`
echo ${res}   if [ $a == $b ]
then echo "a=b"
fi if [ $a != $b ]
then echo "a!=b"
fi
  1. 关系运算符
    关系运算符只支持数字,不支持字符串,除非字符串的值为数字
  2. 布尔运算符
  3. 逻辑运算符
  4. 字符串运算符
  5. 文件测试运算符

七、Shell echo命令

echo命令可以用于字符串、变量的输出等。echo命令输出会自动换行

  1. 字符串输出
echo "This is a string"
  1. 输出变量
var="this is var"
echo ${var} #输出 this is var
  1. 显示转义符
echo -e "OK! \n" # -e开启转义
echo -e "ok! \c" # \c为不换行转义符
  1. 显示结果定向至文件
#!/bin/bash
#test.sh
echo "write this from test.sh to myfile.sh" > myfile.sh
#执行test.sh文件,则myfile.sh中将会出现上述字符串
  1. 原样显示字符串或不取变量的值,用单引号
echo ‘\sss${var}’ #输出结果为 \sss${var}
  1. 显示某一命令执行的结果
echo `date` #这里使用的是反引号,输出结果为当前日期

八、Shell printf 命令

Linux中Shell脚本教程学习相关推荐

  1. Linux中 shell 脚本获取当前工作目录的方法

    Linux中 shell 脚本获取当前工作目录的方法 1. 示例 2. 注意: 参考: 1. 示例 test.sh target_dir=$(cd $(dirname $0); pwd) echo $ ...

  2. linux存放脚本目录,linux中Shell脚本所在目录的绝对路径linux操作系统 -电脑资料...

    linux shell 脚本里面如果想得到当前脚本文件存放的绝对路径,也没有太现成的命令可以调用,不过可以通过下面的语句来获取:代码如下复制代码 baseDirForScriptSelf=$(cd & ...

  3. Linux 中shell脚本编写教程

    1.文本处理工具 1.1 grep工具 Linux grep 命令用于查找文件里符合条件的字符串.  grep [选项] '关键字 文件名 grep 指令用于查找内容包含指定的范本样式的文件,如果发现 ...

  4. linux脚本 程序输入,[转]Linux中shell脚本如何自动输入…

    shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量.条件.算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力得多. 但 ...

  5. linux下的shell脚本,linux下shell脚本的学习

    一:shell脚本须以#!/bin/sh开始,指定了命令的解释器 #!/bin/sh  //指定解释器 sudo mv /home/pi/Desktop/installationPackage/bac ...

  6. Linux中Shell脚本编程

    一.shell定义与执行 shell既是一种应用程序,又是一种程序设计语言 shell是用户和Linux内核之间的接口程序 >作为应用程序: 交互式地解释.执行用户输入的命令,将用 户的操作翻译 ...

  7. linux 界面自动输入密码,Linux中shell脚本如何自动输入密码

    shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量.条件.算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力得多. 但 ...

  8. Linux中Shell脚本函数库的笔记

    Shell函数库的作用:函数库就是对一些十分常用的功能,独立出来,然后集中存放在一些独立的文件中,这些文件可以理解为函数库.函数库本质上也是函数,一般情况下函数库的函数建议使用下划线开头. 示例: c ...

  9. linux中shell脚本启动报错

    2019独角兽企业重金招聘Python工程师标准>>> 把sh脚本放到开机自启动中 安装 dos2unix :apt-get install dos2unix 执行转换 dos2un ...

  10. shell linux中shell脚本编写俄罗斯方块

    #!/bin/bash# Tetris Game#APP declaration APP_NAME="${0##*[\\/]}" APP_VERSION="1.0&quo ...

最新文章

  1. 合并排序的非递归实现(自底向上设计)
  2. 数据结构34:二叉树前序遍历、中序遍历和后序遍历
  3. c++primer 5th第15章基础、课后习题自己解析、心得体会等
  4. 【牛客 - 272D】Where are you(Tarjan求桥)
  5. 清华大学王媛老师的讲座
  6. swift java_swift语法和java的比较
  7. PHP使用weui,微信小程序WeUI引入
  8. java单词转化为数组_java中数组与List相互转换的方法
  9. (三)Omniglot Dataset介绍
  10. 最好用16进制工具wxHexEditor
  11. 计算机专业英语讲课笔记(1)
  12. 黑客攻防技术宝典(六)
  13. 【大规模MIMO学习笔记】大规模MIMO的信道特点
  14. 史上最全 Vue 前端代码风格指南
  15. UEFI开发探索97 – EDK2模拟器搭建网络环境
  16. 我的世界java最低配置要求,我的世界需要什么配置
  17. 天荒地老修仙功-第六部:Spring Cloud Eureka——服务发现
  18. 运维36讲第07课:基于 Django_crontab、Xadmin 做一套定时任务管理系统
  19. 现在java开发用什么工具
  20. Patchwork++论文阅读——基于3D点云的快速鲁棒地面分割算法

热门文章

  1. steam常用计算机,絮絮叨叨的繁星 篇二:新电脑必备——常用验机和跑分软件汇总...
  2. C语言课程设计——25道蓝桥杯练习题
  3. win7 ie11降级ie8
  4. 关于电力系统标准规约的一些理解
  5. r语言worldclim数据_arcgis中如何提取气候数据
  6. 【FPGA】Vivado 保姆级安装教程 | 从官网下载安装包开始到安装完毕 | 每步都有详细截图说明 | 支持无脑跟装
  7. modbus协议的常用测试工具
  8. 玻色量子与Menlo Systems共同开展光量子计算研发
  9. 萤火虫算法求解简单TSP问题
  10. IDEA集成SVN客户端