Shell 基础编程


重启虚拟机遇到磁盘损坏如何解决






Shell编程中变量的声明、引用及作用域

Shell程序

  • 概述

    文件形式存放批量的Linux命令集合,该文件能够被Shell解释执行,这种文件就是Shell脚本程序

    通常由一段Linux命令Shell命令控制语句注释语句组成

  • 编写

    Shell脚本是纯文本文件,可以使用任何文本编辑器编写

    Shell脚本通常以.sh作为后缀名

  第一行一般是指定用哪个程序来编译和执行脚本
#!/bin/bash #!/bin/sh ->(除了第一行,剩下的用#都表示是注释)

变量

  • 概述

    变量名必须以字母或下划线开头,后面可以跟字母、数字或下划线,任何其他字符都标志着变量名的结束

    变量名对大小写很敏感

    eg:

  • 类型

    根据变量的作用域,变量可以分为本地变量环境变量

    本地变量只在创建它们的Shell程序中可用,而环境变量则在Shell中的所有用户进程中可用,通常也称为全局变量
  • 赋值

    等号两边不能有空格

    如果要给变量赋空值,可以在等号后面跟一个换行符
  显示变量的值
echo $variable$ 或 echo${variable} 清除变量
unset variable 显示所有的变量
set 环境变量(全局变量)按照惯例需要大写
export LANG

Shell编程中位置参量使用和命令执行状态码

位置参量

  • 概述

    位置参量是一组特殊的内置变量,通常被Shell脚本用来从命令行接受参数,或被函数用来保存传递给它的参数

    执行Shell脚本时,用户可以通过命令行向脚本传递信息,跟在脚本名后面的用空格隔开的每个字符串都称为位置参量。

    在脚本中使用这些参数时,需通过位置参量来引用
		例如:
$1表示第一个参数,$2表示第二个参数
以此类推,直到$9以后需要用花括号把数字括起来,如第10个位置参量以${10}的方式来访问
  • 位置参量列表

  • 示例:



  • 给位置参量传递参数
  Shell-test.sh This is Peter

  如果位置参量中有空格,则需要用到双引号
Shell-test.sh This is "Peter Piper"

Shell编程中数组、data和cal命令

数组

  数组定义
arr=(math english chinese) 数组初始化
arr=(math english chinese) 数组引用
引用变量:${arr[0]}
数组个数:${#arr[*]}
所有元素:${arr[*]} 数组赋值
arr[0]=chemical
  • 示例

date命令



cal命令

  查看系统当前月份日历表
$ cal 查看指定年份所有日历表
$ cal year 查看指定年月日历表
$ cal month year
  • 示例






Shell中判断表达式与if语句的使用

判断表达式

  • 常用判断命令
  判断「文件类型」
判断文件是否存在
test -e fileName
(-e FILE
FILE exists) 判断文件是否存在且是否为文件
test -f fileName
(-f FILE
FILE exists and is a regular file) 判断文件是否存在且是否为目录
test -d fileName
(-d FILE
FILE exists and is a directory)
-------------------------------------------------------------------------------------
判断「文件权限」
判断文件是否存在且是否具有可读权限
test -r fileName
(-r FILE
FILE exists and read permission is granted) 判断文件是否存在且是否具有可写权限
test -w fileName
(-w FILE
FILE exists and write permission is granted) 判断文件是否存在且是否具有可执行权限
test -x fileName
(-x FILE
FILE exists and execute (or search) permission is granted)
-------------------------------------------------------------------------------------
判断两个整数之间的大小关系
test n1 -eq -n2 ->(是否相等 -equal)
test n1 -ne -n2 ->(是否不相等 -not equal)
test n1 -gt -n2 ->(n1是否大于n2 -greater than)
test n1 -lt -n2 ->(n1是否小于n2 -less than)
test n1 -ge -n2 ->(n1是否大于等于n2 -greater than and equal)
test n1 -le -n2 ->(n1是否小于等于n2 -less than and equal)
-------------------------------------------------------------------------------------
判断字符串数据
test -z string ->(字符串是否为0 为0则为空字符串 -zero)
test -n string ->(字符串是否不为0 -nonzero)(-n可省略)
test str1=str2 ->(判断str1和str2是否相等)
tesr str1!=str2 ->(判断str1和str2是否不等)
-------------------------------------------------------------------------------------
  • [ ] 符号

    除了test外,还可以利用 [ ] 进行数据的判断
  比如想要知道$HOME这个变量是否为空
[ -z "$HOME" ];echo $?
  • 注意

    因为中括号用在很多地方,包括通配符正则表示法等,所以如果要在bash的语法当中使用 [ ] 作为Shell的判断式时,必须要注意 [ ] 的两端需要有空格符来分隔

if语句

  • 单层、简单条件判断式
  if [ 条件判断式 ]; then
当条件判断式成立时,可以进行的指令工作内容
fi(结束if语句)
  • 多重,复杂条件判断式
  if [ 条件判断式 ]; then
当条件判断式成立时,可以进行的指令工作内容
else
当条件判断式不成立时,可以进行的指令工作内容
fi
------------------------------------------------------------------
if [ 条件判断式1 ]; then
当条件判断式1成立时,可以进行的指令工作内容
elif [ 条件判断式2 ]; then
当条件判断式2成立时,可以进行的指令工作内容
...
else
当所有的条件判断式不成立时,可以进行的指令工作内容
fi

Shell编程中for循环和while循环

for循环

  • 格式1
  for var in con1 con2 con3
do
程序段
done $var变量在for循环中:
第一次循环时,$var的内容为con1
第二次循环时,$var的内容为con2
第三次循环时,$var的内容为con3
...
  • 示例
for animal in tiger lion elephant
do
echo "There are ${animal}s...."
done
  • 格式2
#  直接用例子演示
num=10
s=0
for((i=0;i<${num};i=i+1))
do
s=$((${s}+${i}))
done echo ${s}

while循环

  • 格式
  while [ condition ]
do
程序段落
done ====>当 [ condition ] 成立时,就进行循环,直到不成立为止
------------------------------------------------------------------------------------------
until [ condition ]
do
程序段落
done ====>当 [ condition ] 不成立时,就进行循环,直到成立为止
  • 逐行读取文件或命令
  cat file | while read line
do
echo $line
done
----------------------------------------------------------------
cat 'ls ./*.txt' | while read line
do
echo $line
done

【Linux基础总结】Shell 基础编程的更多相关文章

  1. Linux正则表达式、shell基础、文件查找及打包压缩

    Linux正则表达式.shell基础.文件查找及打包压缩 一.正则表达式 Linux正则表达式分为2类: 1.基本正则表达式(BRE) 2.扩展正则表达式(ERE) 两者的区别: 1.使用扩展正则表达 ...

  2. Linux零基础之shell基础编程入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  3. Linux笔记(shell基础,历史命令,命令补全/别名,通配符,输出重定向)

    一.shell 基础 shell是个命令解释器,提供用户和机器之间的交互 每个用户都可以拥有自己特定的shell centos7默认Shell为bash(Bourne Agin shell) 除了ba ...

  4. linux 学习10 shell 基础

    10.1 Shell概述 .Shell是什么 Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编写一 ...

  5. 好记性比如烂笔头--linux学习笔记7关于linux中的shell脚本编程

    之前看的各种面试,貌似都有shell脚本编程,没了解之前感觉很复杂,现在了解了些,没想象中那么难. 逻辑主要是这样的 编写.sh的脚本文件,文件里面的代码,就是在命令行输入的可执行命令的加强版,所谓加 ...

  6. Linux基础篇–shell脚本编程基础

    本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础程序:指令+数据程序编程风格:   过程式:以指令为中心,数据服务于指令   对象式:以数据为中心 ...

  7. linux 学习随笔-shell基础知识

    1:用户的shell历史命令保存在home/username/.bash_history中 #!!  执行用户的上一条命令 #!pw  执行命令历史中最近一次以pw开头的命令 2:'*'来匹配零或多个 ...

  8. linux笔记:shell基础-概述和脚本执行方式

    什么是shell: linux使用的默认shell是Bash: shell脚本的后缀名为.sh,shell脚本的第一行#!/bin/bash 不是注释,而是标识这是一个shell脚本,因为linux并 ...

  9. linux笔记:shell基础和bash的基本功能

    shell的优势:可以直接调用linux系统命令 shell脚本的基本写法:脚本名以.sh结尾程序的第一行为#!/bin/bash,告诉系统这是一个shell脚本以#作为注释shell脚本的执行方式: ...

  10. linux/linux学习笔记-Shell基础(mooc)

    一.shell概述 shell根据ascII表,将命令翻译为0101...传给内核执行. 内核->shell翻译为命令->用户(操作的界面就是shell,shell=翻译官) linux标 ...

随机推荐

  1. S - Primitive Primes CodeForces - 1316C 数学

    数学题 在f(x)和g(x)的系数里找到第一个不是p的倍数的数,然后相加就是答案 为什么? 设x1为f(x)中第一个不是p的倍数的系数,x2为g(x)...... x1+x2前的系数为(a[x1+x2 ...

  2. D. Minimax Problem Codeforces 1288D binary_search+二进制

    题目大意:n*m的矩阵中,找到两行数,可以形成两个一维数组,数组1的位置i和数组2的位置i去最大构成新数组b的元素b[i],最终目的要使数组b中最小的数尽可能的大 题解: m的范围是(1,8),比较小 ...

  3. redis 分布式锁的 5个坑,真是又大又深

    引言 最近项目上线的频率颇高,连着几天加班熬夜,身体有点吃不消精神也有些萎靡,无奈业务方催的紧,工期就在眼前只能硬着头皮上了.脑子浑浑噩噩的时候,写的就不能叫代码,可以直接叫做Bug.我就熬夜写了一个 ...

  4. Java中常用的七个阻塞队列第二篇DelayQueue源码介绍

    Java中常用的七个阻塞队列第二篇DelayQueue源码介绍 通过前面两篇文章,我们对队列有了了解及已经认识了常用阻塞队列中的三个了.本篇我们继续介绍剩下的几个队列. 本文主要内容:通过源码学习De ...

  5. 2. node xlsx的使用

    1. 使用xlsx模块 const xlsx = require('xlsx'); //excel async exportexcel() { let arrayData = [ ['姓名', '电话 ...

  6. [linux] [nginx] 一键安装web环境全攻略phpstudy版,超详细!

    找到运行中的服务器(实例). 打开这个主要是看它的IP,是公网ip,公网ip,公网ip,重要的事情说三遍. 接下来我们可以不用在阿里云上操作了,直接用客户端操作,这两个客户端就是Xshell 5和Xf ...

  7. 是时候学习python了

    “ 学习Pyhton,如何学以致用 -- 知识往问题靠,问题往知识靠” 01 为什么学Python 一直有听说Python神奇,总是想学,虽然不知道为啥.奈何每天写bug,修bug忙得不亦乐乎,总是不 ...

  8. 微信网页授权报code been used, hints: [ req_id: XYv1Ha07042046 ]

    先贴上代码: public function index() { $code = input('get.code'); $tool = new Wxtool(); if (empty($code)) ...

  9. IBM WebSphere 远程代码执行漏洞安全预警通告

    近日,IBM发布安全通告称修复了一个WebSphere Application Server中一个潜在的远程代码执行漏洞(CVE-2018-1567).攻击者可以构造一个恶意的序列化对象,随后通过SO ...

  10. 设置共享内存大小 【windows】

    hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, // use paging file NULL, // default security PAG ...