Linux中shell语法和脚本编写

原文地址:学习shell的语法,及脚本编写

其它相关辅助资料:
编写shell脚本所需的语法和示例
基础linux指令&简单的shell语法和脚本编写

什么是shell脚本

1、shell是一个命令行解释器,是解释执行的脚本语言,在shell中可以直接调用linux系统命令。为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序(说白了就是一个解释器,拿这个写内核就认识,它就将我们编写的程序翻译成01010101…)

2、程序也就是计算机命令。输入指令回车之后,shell就会把这个命令通过对应的ascii码翻译成指定的机器语言,传递给内核。然后调用内核(硬件)来处理

我们操作的文字界面就是shell

指令是 echo $SHELL

SHELL是环境变量(所有操作定义环境的变量,每个用户的操作环境不一样),$是调用变量

退出的时候用exit

否则你输入几遍就进入了,第1次父shell,第2次子shell,第3次孙shell…因为在一个shell中,可以调用其他的shell

输出不同颜色的字

    echo  -e  "\033[颜色 字符串 \033[0m"echo -e "\033[30m 黑色字 \033[0m" echo -e "\033[31m 红色字 \033[0m" echo -e "\033[32m 绿色字 \033[0m" echo -e "\033[33m 黄色字 \033[0m"echo -e "\033[34m 蓝色字 \033[0m"echo -e "\033[35m 紫色字 \033[0m" echo -e "\033[36m 天蓝字 \033[0m"echo -e "\033[37m 白色字 \033[0m"

创建第一个shell脚本

第1行:#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

文件引入

俩种方式:

1、使用.空格 要引入的绝对路径(上图4行)

2、source 要引入的绝对路径(上图5行)

执行方式

俩种方式:

1、使用相对路径 ./文件名

相对路径之所以能执行,是因为/etc/passwd中最后一个字段,所使用的bash,和你#!后面声明的bash解释器一致

2、使用/bin/bash 文件名

输出/输入重定向

1、执行的命令 > 要保存到哪个文件,写绝对路径 //覆盖的方式

2、执行的命令 >> 要保存到哪个文件,写绝对路径 //追加的方式

3、命令<file输出重定向 //输入重定向

标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。

标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息

demo1:将一个文件清空

echo > test.txt //echo一个空(空格)给文件,是将该文件清空

demo2:故意制造错误(输入错误的命令)

ech ‘aaa’ 2 > /dev/null //将报错信息 导入到 /dev/null中

ech ‘bbb’ > /dev/null 2>&1 //同上

demo3:统计该文件中的行数

shell变量

1、变量的赋值:变量名=值 注意:等号倆边不能有空格

2、变量的访问(在脚本中):先用{}声明变量,再用$调用

echo $username 或者 echo ${username}123

3、单引 和 双引:单引原样输出,双引解析变量

4、字符串拼接:不用点或+拼接,什么都不用加。

username=‘liudehua’

password=‘123456’

echo usernameusernameusernamepassword

5、获取字符串长度:变量前加#

echo ${#username}

6、字符串截取:变量后,用冒号分割2参数

echo ${username:1:3}

shell运算符

1、基本运算符

不支持 直接 + - * /

但是有个命令可以解决 expr 计算的

echo expr $1 + $2 #脚本中的加法计算

注意:不加反引号,就被当成字符串,加上反引会按正常命令执行

2、表达式运算符

== != -eq -ne -gt -lt -ge -le

3、布尔运算符

! -o -a

取反 或 且

4、逻辑运算符

情况1:在脚本中使用 || && [[ 条件一 && 条件二 ]]

情况2:在命令行中用(也一样,)

5、判断文件运算符

-d 判断是否是目录;

[[ -d $1 ]] || mkdir $1 #如果该目录不存在,则创建

-f 判断是否是文件;

-e 判断文件或目录是否存在;

shell数组

1、定义数组:变量名=(元素1 元素2); //元素用()括起来,以空格为分隔符

username=(‘liudehua’ ‘zhangxueyou’ ‘liming’)

username[3]=‘guofucheng’ //以索引的方式添加元素

2、读取数组:先{}声明变量,用$调用,取下标

echo ${username[2]} //打印出liming

echo ${username[*]} //*打印出数组中的所有元素

echo ${username[@]} //@同上

3、计算数组中的元素:变量名前加#

echo ${#username[*]}

shell传值

在执行脚本的时候传实参:./文件名 参数1 参数2 参数3 (每个参数中间用空格)

在脚本中通过形参接收:$1 $2 $3 (它按顺序接收,所以变量名叫啥都行,)

$# 传递到脚本的参数个数
$$ 脚本运行的当前进程ID号
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

shell流程控制

1、if、elseif、else

注意:不用加分号;表达式中2空格;表达式前1个空格;

一个[ ]表达式中解析的是布尔运算符;2个[[ ]]表达式 中才能使用逻辑运算符

#!/bin/bashscore=$1        #接收参数if [ $score -lt 60 ] #条件表达式[]中 左右要各加一个空格;表达式前面也要有个空格
thenecho '不及格'
#elif [ $score -gt 60 -a $score -lt 80 ] #elseif、大于60并且小于80、布尔运算符-a等于and
elif [[ $score -gt 60 && $score -lt 80 ]] #逻辑运算符&&
thenecho '优秀'
elseecho 'very good!!'fi
#如果接收到的参数 等于 888,就输出哈哈哈
[[ $1 -eq 888 ]] && echo  '哈哈哈'; #简化写法

2、for循环

在脚本中使用

当做命令使用:每行以分号结束

for dir in ls /home/*;do [[ -d $dir ]] && echo $dir;done //先查看(获取);在判断;最后输出/home目录下的所有目录

如需删除目录,用rm -rf 将echo 替换掉

3、while循环

4、case

#!/bin/bashusername=$1     #接收参数
case $username inxigua)echo '唔系 西瓜';;      #结束 相当于breakcgua)echo '唔系 C瓜';;*)      # *和default是一个意思echo '雷猴 请问找哪位~';;
esac

shell函数

定义函数,2种形式:

1、使用function声明

2、不使用function声明,匿名函数

#!/bin/bash#第1种
function leiHou(){echo '使用function声明'
}#第2种
zhongYi(){echo '匿名函数'
}#调用函数,不用加(),也不用拿$
#shell是面向过程,只能先定义,后调用
#相同函数名,调用时,后面的会覆盖前面的leiHou
zhongYi

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下变量名长度,Linux中shell的变量介绍

    Linux中shell的变量介绍 发布时间:2020-06-24 16:20:39 来源:亿速云 阅读:112 作者:元一 这期内容当中的小编将会给大家带来有关Linux中shell的变量介绍,以专业 ...

  4. Linux中shell的分类以及查看当前的shell

    DOS/Windows 与 Linux 的最重要的区别之一是 Linux 的命令 shell 是与操作系统相分离的一层. 目前流行的shell有ash.bash.ksh.csh.zsh,如下介绍: b ...

  5. 手把手教学Linux下oracle11g自动化安装脚本编写

    手把手教学Linux下oracle11g自动化安装脚本编写 产品:Oracle 版本:11.2.0.4 环境:Centos7 文章目录 手把手教学Linux下oracle11g自动化安装脚本编写 0. ...

  6. 2021年大数据Kafka(三):❤️Kafka的集群搭建以及shell启动命令脚本编写❤️

    全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Kafka的集群搭建以及shell启动命令脚本编写 一.搭建 ...

  7. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释:  变量说明:  $$  Shell本身的PID(ProcessID)  $!  Shell最后运行的后台Process的PID  $ ...

  8. linux变量中代,linux中shell变量$#,$@,$0,$1,$2和变量${0%/*}

    一直傻傻搞不清,还是梳理一下吧. linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Pr ...

  9. linux+管道+分段,Linux中shell基础、重定向、管道符、环境变量

    原标题:Linux中shell基础.重定向.管道符.环境变量 1.什么是shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器).它接收用户输入的命令并把它送入内核 ...

最新文章

  1. 7怎么导入中文文献_如何下载并引用参考文献?
  2. python在教育领域可以干什么_学了Python一般可以用来干什么呢?
  3. poj 3723 Conscription (并查集)
  4. 数据中台全景架构及模块解析
  5. chrome 主进程cpu占用50%怎么办?
  6. IntelliJ IDEA 2020.2 正式发布,真香!
  7. 黑客马拉松 招募_举办第一次黑客马拉松的提示
  8. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(4) - 8086/16位指令操作码字节
  9. 改变你一生命运的话语 不得不信
  10. echarts 柱状图如何不顶格_echarts柱状图如何中间对齐而不是底部对齐?
  11. 【C语言】c语言练习题【4】(适合初学者)
  12. MCMC采样算法理解
  13. ubuntu20.04修改mac地址
  14. python换行输入数据_python 对比两个文件内容或字符串内容时的换行符/交作业检测小程序...
  15. html语音对话,纯CSS对话框/对话气泡/语音泡沫/speech bubbles【27个示例】
  16. tkinter 的界面美化库:ttkbootstrap 使用教程
  17. 计算机学院论文谢辞怎么写,论文致谢:函授毕业论文谢辞怎么写
  18. 纪念Dropbox君
  19. 红队搬运工-github项目-第一期
  20. Visual studio2022还原VC6环境设置

热门文章

  1. 乖离性暗机器人_乖离性百万亚瑟王超弩暗机器人平民通关攻略 超弩暗机器人怎么打...
  2. 切尔诺贝利事故中的人们
  3. 历届试题-打印十字图(打印)
  4. Linux下面解压.tar.gz和.gz文件解压的方式
  5. 如何生成微信二维码?生成方法其实非常简单
  6. 三国战纪-风云再起----回忆当年心中的风云
  7. inurl+:php?id=,首页
  8. 不装Raysource照样下载
  9. 聚类技术分层和非分层
  10. C++ fscanf 读取一整行