命令是什么

linux当中的命令可以是内嵌在shel1中

命令的本质是程序或者可执行脚本(命令的集合)

命令是如何运行的:

一定要清楚

内部外部

内部是系统自带的内嵌进shell当中外部是后天安装,或者自行编写的命令

内部要大于外部

内部系统内存外部是放在硬盘当中

绝对路径>别名>内部>hash(缓存执行过外部命令后,外部命令的路径会被缓存下来)>外部之后学习的脚本外部命令

windows中后台安装的程序一定要有一个.exe文件外部命令也一定要有一个绿色可执行的文件

变量可以变化的量

第一次我定义a=1第二次再定义a=2那么这个a就是变量

系统去执行命令―如果是内部命令在内存可以直接运行,如果第一次执行一个外部命令

ls先去/usr/local/sbin里面寻找如果找到就直接执行―如果找不到就下一个文件夹/usr/local/bin如此继续直到$PATH 里的路径找完,

如果在$PATH找不到对应的1s文件会如何?提示没有这个命令

$PATH这个变量定义了命令的文件存放的位置

系统自带的变量变量就是可以修改

$PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

$PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin: /mnt

变量的范围

bash进入有一个新的bash环境―你可以理解为﹑相当于在windows 中多开了一个桌面

系统定义的变量一般全局变量

全局变量简单只要在我的系统里就生效,无论你在哪个bash中

bash程序新打开

局部变量只对当前的bash环境生效

  1. [root@localhost bin]# cat /etc/shells
  2. /bin/sh
  3. /bin/bash
  4. /sbin/nologin
  5. /usr/bin/sh
  6. /usr/bin/bash
  7. /usr/sbin/nologin
  8. /bin/tcsh
  9. /bin/csh

基本语法

解释器

在 shell 脚本,#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 解释器。

#! 决定了脚本可以像一个独立的可执行文件一样执行,而不用在终端之前输入sh, bash, python, php等。

  1. # 以下两种方式都可以指定 shell 解释器为 bash,第二种方式更好
  2. #!/bin/bash
  3. #!/usr/bin/env bash
注释

注释可以说明你的代码是什么作用,以及为什么这样写。

shell 语法中,注释是特殊的语句,会被 shell 解释器忽略。

  • 单行注释 - 以 # 开头,到行尾结束。被注释的语句在脚本运行时是不会被执行。
  • 多行注释 - 以 :< 开头,到 EOF` 结束。

『示例源码』

  1. # echo '这是单行注释'
  2. :<<EOF
  3. echo '这是多行注释'
  4. echo '这是多行注释'
  5. echo '这是多行注释'
  6. EOF

如何执行

source和.会在当前shell 环境中执行脚本

bash sh绝对路径﹑相对执行执行的脚本会创建一个子shell环境,并在这个子shell环境中执行这个脚本

输入、输出流

Bash 接收输入,并以字符序列或 字符流 的形式产生输出。这些流能被重定向到文件或另一个流中。

有三个文件描述符:

代码 描述符 描述
0 stdin 标准输入
1 stdout 标准输出
2 stderr 标准错误输出

重定向

重定向让我们可以控制一个命令的输入来自哪里,输出结果到什么地方。这些运算符在控制流的重定向时会被用到:

Operator Description
> 重定向输出
&> 重定向输出和错误输出
&>> 以附加的形式重定向输出和错误输出
< 重定向输入
<< Here 文档 语法
<<< Here 字符串

以下是一些使用重定向的例子:

  1. ### ls的结果将会被写到list.txt中
  2. ls -l > list.txt
  3. ### 将输出附加到list.txt中
  4. ls -a >> list.txt
  5. ### 所有的错误信息会被写到errors.txt中
  6. grep da * 2> errors.txt
  7. ### 从errors.txt中读取输入
  8. less < errors.txt

管道符 |

正则表达式中表示或者

  1. # echo "ooooee" |egrep '(oo|ee)'{2} 表示匹配 oooo 或者 eeee 的字符

前面命令的标准输出作为后面命令的标准输入

  1. # ifconfig|grep eth0 表示ifconfig查出来的信息然后过滤出eth0的这一行

变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。

保存将来会变化的数据,即使数据变化,直接调用变量即可,各种Shell环境中都使用到了"变量'的概念。Shell变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell程序能够提供更加灵活的功能,适应性更强。

常见Shell变量的类型包括:

1自定义变量:由用户自己定义,修改和使用

2环境变量:由系统维护,用于设置工作环境

3只读变量:只可以读取不可以更改

4位置变量:通过命令行给脚本传递参数

5预定义变量: Bash中内置的一类变量,

不能修改系统内置变量:PATH,UlD,HOSTNAME,USER

变量命名原则

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用 bash 里的关键字(可用 help 命令查看保留关键字)。
  • 区分大小写
  • 不能使程序中的保留字和内置变量:如: if, for,hostname
  • 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线“-",和主机名相反不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
  • 大驼峰StudentFirstName
  • 小驼峰studentFirstName下划线student_name

单引号和双引号

shell 字符串可以用单引号 '',也可以用双引号 “”,也可以不用引号。

  • 单引号的特点
  • 单引号里不识别变量
  • 单引号里不能出现单独的单引号(使用转义符也不行),但可成对出现,作为字符串拼接使用。
  • 双引号的特点
  • 双引号里识别变量
  • 双引号里可以出现转义字符

综上,推荐使用双引号。

反引号

可以调用命令结果

`` 相当于 $(命令)

命令行替换

例如:可以设变量a=ls

变量作用范围

默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。可以造过内部命令expart将指定的变量为全局变量,便用户定义的变量在所子shell环境中可以继续使用

方法:

1.格式1:export变量名

⒉格式2 :.export变量名=变量值可以使用pstree查看shell的环境

输入bash进入子shell

ctrl+D组合exit退出子shell

或加入变量文件中

查看和引用变量的值

访问变量的语法形式为:${var}$var

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,所以推荐加花括号。

  1. word="hello"
  2. echo ${word}
  3. # Output: hello

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

  1. rword="hello"
  2. echo ${rword}
  3. readonly rword
  4. # rword="bye" # 如果放开注释,执行时会报错

删除变量

使用 unset 命令可以删除变量。变量被删除后不能再次使用。unset 命令不能删除只读变量。

  1. dword="hello" # 声明变量
  2. echo ${dword} # 输出变量值
  3. # Output: hello
  4. unset dword # 删除变量
  5. echo ${dword}
  6. # Output: (空)

位置变量

  1. #!/bin/bash
  2. echo "位置变量1是$1"
  3. echo "位置变量2是$2"
  4. echo "位置变量3是$3"
  5. echo "位置变量4是$4"
  6. echo "位置变量5是$5"
  7. echo "位置变量10是${10}"
  8. ~
  9. [root@localhost wuwei]# ./weizhi.sh {a..j}
  10. 位置变量1a
  11. 位置变量2b
  12. 位置变量3c
  13. 位置变量4d
  14. 位置变量5e

read -p

从键盘输入的内容变成变量

  1. [root@localhost wuwei]# read -p "Enter your name: "
  2. Enter your name: davin
  3. [root@localhost wuwei]# echo $REPLY
  4. davin

终端输入密码时候,不让密码显示出来

方法1:

  1. #!/bin/bash
  2. read -p "输入密码:" -s pwd
  3. echo
  4. echo password read, is "$pwd"

方法2:

  1. #!/bin/bash
  2. stty -echo
  3. read -p "输入密码:" pwd
  4. stty echo
  5. echo
  6. echo 输入完毕。

位置变量

位置参数是在调用一个函数并传给它参数时创建的变量。

位置参数变量表:

变量 描述
$0 脚本名称
$1 … $9 第 1 个到第 9 个参数列表
${10} … ${N} 第 10 个到 N 个参数列表
$* or $@ 除了$0外的所有位置参数
$# 不包括$0在内的位置参数的个数
$FUNCNAME 函数名称(仅在函数内部有值)

$0 代表脚本本身

$# 代表脚本后面跟的参数(位置变量)的个数

$* 不加双引号的话 $和$@都代表脚本后面跟的所有参数,加上双引号 "$" 会把所有参数当做一个整体的参数(此时参数数量为1)去看待

$@ 加上双引号 "$@" 会把脚本后面跟的每一个参数当做一个个体去看待

$? 代表上一条命令或者脚本执行后返回的状态码,返回值为0表示执行正确,为非0值表示执行异常

return 退出函数时获取的返回值(0-255,超过部分 %256 取余)

运算符

整数运算;算术运算符

下表列出了常用的算术运算符,假定变量 x 为 10,变量 y 为 20:

运算符 说明 举例
+ 加法 expr $x + $y 结果为 30。
- 减法 expr $x - $y 结果为 -10。
* 乘法 expr $x * $y 结果为 200。
/ 除法 expr $y / $x 结果为 2。
% 取余 expr $y % $x 结果为 0。
= 赋值 x=$y 将把变量 y 的值赋给 x。
== 相等。用于比较两个数字,相同则返回 true。 [ $x == $y ] 返回 false。
!= 不相等。用于比较两个数字,不相同则返回 true。 [ $x != $y ] 返回 true。

注意:条件表达式要放在方括号之间,并且要有空格,例如: [$x==$y] 是错误的,必须写成 [ $x == $y ]

  1. x=10
  2. y=20
  3. echo "x=${x}, y=${y}"
  4. val=`expr ${x} + ${y}`
  5. echo "${x} + ${y} = $val"
  6. val=`expr ${x} - ${y}`
  7. echo "${x} - ${y} = $val"
  8. val=`expr ${x} \* ${y}`
  9. echo "${x} * ${y} = $val"
  10. val=`expr ${y} / ${x}`
  11. echo "${y} / ${x} = $val"
  12. val=`expr ${y} % ${x}`
  13. echo "${y} % ${x} = $val"
  14. if [[ ${x} == ${y} ]]
  15. then
  16. echo "${x} = ${y}"
  17. fi
  18. if [[ ${x} != ${y} ]]
  19. then
  20. echo "${x} != ${y}"
  21. fi
  22. # Output:
  23. # x=10, y=20
  24. # 10 + 20 = 30
  25. # 10 - 20 = -10
  26. # 10 * 20 = 200
  27. # 20 / 10 = 2
  28. # 20 % 10 = 0
  29. # 10 != 20

一、shell编程与变量的更多相关文章

  1. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

  2. Linux —— Shell编程之变量赋值和引用

    Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...

  3. Linux编程 21 shell编程(环境变量,用户变量,命令替换)

    一.概述 这篇介绍shell的变量使用,跟其实语言一样,都有声明变量,使用变量,在shell中变量允许你临时地将信息存储中shell脚本中,以便和脚本的其他命令一起使用. 1.1 环境变量 在前面章节 ...

  4. Shell编程-02-Shell变量

    目录 什么是Shell变量 变量类型 环境变量初始化及其对应文件的生效顺序 什么是Shell变量     在初等数学数学方程式中,我们会经常碰到类似于这样的方程式:y=x+1 ,等号左右两边的x和y称 ...

  5. Linux Shell编程、变量、控制语句

    为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...

  6. linux shell编程之变量和bash配置文件(第一篇)

    编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不用 ...

  7. SHELL编程概念&变量剖析

    一.shell软件概念和应用场景 1) 学习Linux技术,不是为了学习系统安装.命令操作.用户权限.配置IP.网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件.程序(Apa ...

  8. Shell 编程 (变量和条件测试)

    变量: 1 . 变量声明 直接使用变量 + 赋值 #!/bin/bash NAME='HELLO WORD' echo $NAME 使用 declare 关键字声明 declare(选项)(参数) + ...

  9. Shell编程之变量进阶

    一.变量知识进阶 1.特殊的位置参数变量 实例1:测试$n(n为1...15) [root@codis-178 ~]# cat p.sh echo $1 [root@codis-178 ~]# sh ...

  10. Shell编程——环境变量

    在Shell程序启动时会自动定义一组变量,这组变量就是环境变量,系统中的所有命令都可以使用这些变量参数. 1.如果在父Shell定义环境变量,在子Shell中也能查看到. (1)父Shell与子She ...

随机推荐

  1. 中文版Postman

    作为软件开发从业者,API 调试是必不可少的一项技能,在这方面 Postman 做的非常出色.但是在整个软件开发过程中,API 调试只是其中的一部分,还有很多事情 Postman 无法完成,或者无法高 ...

  2. 『现学现忘』Git基础 — 4、Git下载与安装

    目录 1.Git下载 2.Git在Windows下的详细安装 3.验证Git是否安装成功 1.Git下载 进入官方地址下载Git客户端:https://git-scm.com/download/win ...

  3. Java语言学习day39--8月14日

    今日内容介绍1.Map接口2.模拟斗地主洗牌发牌 ###01Map集合概述 A:Map集合概述: 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形 ...

  4. Effective HPA:预测未来的弹性伸缩产品

    作者 胡启明,腾讯云专家工程师,专注 Kubernetes.降本增效等云原生领域,Crane 核心开发工程师,现负责成本优化开源项目 Crane 开源治理和弹性能力落地工作. 余宇飞,腾讯云专家工程师 ...

  5. 记录Neo4j上写的简单cypher语法

    neo4j是一个高性能的图形数据库,既然是数据库,那么主要操作就是增.删.改.查.所以进入正题: 一.CREATE:创建 语法如下: 1.create(变量名:标签名) :建立一个标签为Animal的 ...

  6. js 前端实现下拉刷新 上拉加载

    效果 css html,body{ height:100%; // 其他界面未设置html 无法监听scroll } /* 下拉刷新 */ .refresh-loading { transition: ...

  7. 复习 - node.js(接口案例)

    其实复习一次的作用真实太大了,真的,自从上次ajax开始其实就开始i有点懵懵懂懂的感觉,一直拖想到了node在去回顾一遍,这一次回去复习,ajax已经很熟练了,node之前搞不懂那些原理也顺清楚了好多 ...

  8. 4.27-Postman和JMeter总结及实战描述

    一.数据格式 常用的请求方法有8种,但是最常用的有4-5种 1.GET 获取资源 2.POST 添加资源(对服务端已存在的资源也可以做修改和删除操作) 3.PUT 修改资源 4 .DELETE删除资源 ...

  9. vue - vue基础/vue核心内容(2)

    今天的内容书接上回,同样是vue的核心基础部分,今天偏向于理论性,特别是vue对于数据对象的监测那一块,刚开始琢磨了半天,这股劲一过,现在好理解多了 10.watch和computed对比 计算属性案 ...

  10. Swift字符串操作-持续更新-2022

    Swift字符串追加 var str = "OC" str.append(" Swfit") print(str) // 输出结果: OC Swift 输出结果 ...