Shell第一章——Shell编程规范与变量

news2024/11/25 5:02:29

 什么是shell?

shell是把人的语言转换成计算机的二进制语言交给计算机的内核处理

shell在中间作为解释器,翻译的功能

linux系统的shell种类:bash,tcsh,csh

bash:linux默认的shell

tcsh:整合了csh的功能,提供了比csh更多更强大的功能

nologin:禁止用户登录,也是shell的一种形式

cat /etc/shells:查看能用哪些shell

cat /etc/passwd:查看用户使用的shell

除非指定,默认的shell都是bash。

什么是脚本,为什么叫脚本语言

脚本:扩建语言,动态语言,也是一种编程语言,控制软件应用程序

脚本都是以文本形式保存,只在调用时才会进行解释或者编译

脚本语言按行执行,执行文档当中的特定命令。

shell脚本地构成

第一类:开头  注明解释器, #!/bin/bash     #!/usr/bin/paython

第二类:执行语句,都是系统支持地命令格式,只要系统能够执行地语句,包括第三方扩展命令,都可以作为执行语句。

第三类:注释语句   #:作为注释,注释的代码,不会被执行

默认的脚本格式名称:...sh    以 .sh作为文件后缀名

脚本执行的三种方式:不需要赋予执行权限就能执行sh和source

source:点命令,也就是一个符号“ . ”   是bash自带的内部命令,读取文件当中的可执行命令

然后会加载到shell中(切换到目标目录),不用重启直接生效

赋权执行:执行权限 chmod+x  ,chmod  777

相对路径执行:“ ./ ”  " . "  表示当前目录

绝对路径执行:“ / ”   例:/opt/first.sh

这两种方式都必须要有执行权限,这是生产当中的执行方式。

工作当中都是赋权执行,sh和source只限于调试阶段,都是以绝对路径了执行的

例:crontab  -e

   * * 1 * * /opt/first.sh

source  first.sh           定时任务和脚本配合在一起使用

重定向与管道符

管道符:“ | ” 把前面的命令作为后面命令的操作对象

重定向操作:

重定向输出 >  把指定结果保存到文件中,覆盖原有的内容

例:echo  123  >  456             ls查看可以直接看到456,cat  456才可以看到123    123组为输入,输入进456当中

重定向输入:<,从指定文件读取数据,也可以理解为免交互

passwd  - -  stdin  dn  <  123  把123中的文本作为密码重定向输入,修改

一定要关闭安全机制  setenforce  0

重定向输出>> 会在当前内容的尾部追加,不覆盖原有的内容

重定向错误输出2> 将错误信息保存到指定文件,也会覆盖原有内容(用的少)

 2>>  将错误信息保存到指定文件,不会覆盖

混合输出&> 将标准和错误都保存在文件中,他会覆盖原有内容·

shell变量的作用类型:

变量可以改变,有类型和范围,变量需要有范围和类型,用户指定变量(自定义变量)

想干什么,就定义出想干的事情到底是什么  如加法,减法,还有数字

自定义变量:用户指定需要的参数

变量的类型:int:整数  string :字符串  布尔:true或false    浮点:小数

变量名:固定名称、用户自定义、系统预设

用户自定义变量名要求:

1、不要使用linux系统的操作命令或者系统命令来指定变量名

2、不要用中文作为变量名

3、不能使用特殊字符开头,下划线 _ 除外

4、默认原则,最后使用·名称为英文来指定变量名

5、注释,注释的目的是作为解释代码用途

怎么定义变量(写一个变量)

变量名=变量值       变量名是区分大小的   aa=test   AA=test1

查看变量的值:echo $变量名      如:echo  $aa   

或 echo  $AA$aa →更好的表达方式    echo  ${AA}${aa}

例:

只读变量:1、不能重新赋值     2、只读变量不能删除

例:

 

 

赋值时,引号的作用,三种引号  

1、反撇号 `(在键盘上和~在一起)

反撇号的作用:命令替换,把命令执行的结果赋值给变量名

例:

a=`ps  aux  |  grep  root`

echo  $a

2、双引号  “ ” 

双引号的作用:弱引用,打印变量的赋值

例:echo  "$a"

3、单引号 ‘ ’

单引号的作用:强引用,用单引号打印变量名只会输出变量名,不会输出变量的值

例:echo  '$a'  打印出来的就是$a,不会打印出变量的值

总结:单引号和双引号只有打印时有区别,在赋值时没有区别

read命令来获取变量:

read  -p:指定提示符,提示用户输入数据

例:

 

 

 a,b是给变量起的变量名,一定要有否则会报错

变量的作用范围:默认情况下新定义的变量只能在当前的shell中生效,也可以叫局部变量

全局变量:在程序和脚本中以及全部的shell环境中都可以被引用

export:声明全局变量,零时声明

缺点:一旦有重命名就会非常麻烦,可能会导致未知的错误而且难以寻找

永久声明要写在配置文件中

自定义变量结束,下面来到环境变量

环境变量:系统提前创建好的,或者人工添加的,用来设置用户的工作环境,配置系统行为,传递信息,控制程序执行。

系统环境变量:echo  $PATH(所有系统环境变量的路径)  所有人都可见,可用

用户环境变量:只能对当前用户开放使用   echo  $HOME  用户的宿主目录

$USER:表示用户名称      $PWD:表示当前所在目录    $PATH:可执行程序的默认路径

位置变量:也叫命令行参数,脚本运行时,从外部传递变量值,让脚本来运行,可用根据需求来进行处理

$n:n表示的数字 1,2,3,4,5,6,7,8,9  10及以上的参数要用{ }来表示 

 同时也有$0:表示整个命令本身  如sh  wz.sh

例:

 

 

 即$1=10 $2=20   从左往右依次赋值,要在脚本执行时,在外部传入变量值

预定义变量:编程语言或者脚本语言解释器来提供的,可以自动设置,可以更新的,但是由编程语言或者脚本解释器自动完成的,人工不能修改。

$* , $@:表示命令和脚本需要处理的参数

$*:加双引号时会把参数当成一个整体来处理

不加双引号会把参数分开处理,在打印体现在参数是否在一行

$@:加不加双引号都会把参数分开处理

$#和$? :

$#:统计传递给脚本的参数的个数

例:

 

 

 

$?:表示一条命令或者脚本来执行后的一个返回码,返回码为0则表示执行正确,不为0则是执行不正确

并且$?只能返回最近的一次命令或者脚本执行的返回码

整体运算:i=$(($a+$b))  或 特殊的 i=$((10+15)) 

几种运算符   +  -  /  *  %(表示取余数)如 i=$((6%4))  echo  $i  得到2  6除4余2

expr   expr:  i=$(expr  12\*5)

                        echo  $i

 引用变量前一定要加$

i++ i=$(($i+1)) 先赋值,再加 i=1 i=1+1 i=2+1 每次自加1
i-- 每次自减1 先赋值再减
i+=2 每次自加2 先赋值,再加2
++i 先加再赋值,自加1
--i 先减再赋值,自减1

bc:简易的计算器,可以支持运算,也可以进行小数运算

例:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识Spring - 什么是IoC容器?

目录 一、Spring是什么&#xff1f; Spring就是包含了很多工具方法的 IoC 容器。 1. 什么是IoC&#xff0c;什么是容器 2. IoC的优点 (解决耦合问题) 二、什么是Spring IoC 1. Spring IoC详解 &#xff08;1&#xff09;也就是学习 Spring 最核心的功能&#xff1a; &…

uniapp 在app中获取经纬度

在uniapp中app端&#xff0c;uni.getLocation获取经纬度会有大概1-2公里的偏差&#xff0c;在实际项目中&#xff0c;有的需求对经纬度的准确度要求比较严格&#xff0c;研究了很多种方式&#xff0c;最终发现使用高德地图api的微信小程序的插件获取的准确性是最准的&#xff0…

ELK之logstash四大组件

ELK之logstash四大组件 一、grok(正则捕获插件) 1.内置正则调用 //内置正则表达式调用 %{SYNTAX:SEMANTIC}●SYNTAX代表匹配值的类型&#xff0c;例如&#xff0c;0.11可以NUMBER类型所匹配&#xff0c;10.222.22.25可以使用IP匹配。●SEMANTIC表示存储该值的一个变量声明&a…

第十章 如何才能写出好的代码

1、编程的本质 2、好的程序关键是 有效地分离 logic Controller 和 Data 3、代码优化 优化&#xff1a; 逻辑代码 控制流程&#xff1a; 4、编写代码的四个步骤 5、react中哪些设计模式比较常用

算法与数据结构(二)--【1】表的概念及其四种实现方式

一.表是什么 【1】定义&#xff1a;表&#xff0c;又称为线性表。线性表L是n个相同类型数据元素a(1),a(2),...,a(n)组成的有限序列。 【2】相关概念&#xff1a; 表长&#xff1a;线性表中元素的个数&#xff0c;n0时为空表。 【3】基本运算&#xff08;共七种&#xff09;&…

Linux Vim提示:E325: ATTENTION 解决方案

提示&#xff1a; 这是由于我们异常退出vim界面 程序异常关闭导致的 解决&#xff1a; 在这种情况下&#xff0c;您可以根据以下选项来解决问题&#xff1a; [O]pen Read-Only&#xff1a;以只读模式打开文件。这意味着您不能编辑文件&#xff0c;但可以查看其内容。选择此选…

Nacos (2.0版本之后)状态异常集群节点状态异常

在nacos 2.0 之后正常部署后节点状态仅有一个正常,其余均为DOWN 或者SUSPICIOUS 状态 查看日志后发现 ERROR Server check fail, please check server 192.168.172.104 ,port 9849 is available , error {} 其实是nacos 相互之间不能正常通信造成的,nacos客户端升级为2.x版…

2023-07-11:给定正整数 n, 返回在 [1, n] 范围内具有 至少 1 位 重复数字的正整数的个数。 输入:n = 100。 输出:10。

2023-07-11&#xff1a;给定正整数 n&#xff0c; 返回在 [1, n] 范围内具有 至少 1 位 重复数字的正整数的个数。 输入&#xff1a;n 100。 输出&#xff1a;10。 答案2023-07-11&#xff1a; 函数的主要思路如下&#xff1a; 1.若n小于等于10&#xff0c;则直接返回0&…

漏洞复现 || SolarView Compact 存在任意命令执行漏洞(CVE-2023-23333)

免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使…

k8s+springboot+CronJob 定时任务部署

kubernetesspringbootCronJob 定时任务配置如下代码&#xff1a; cronjob.yaml k8s 文件 apiVersion: batch/v1 kind: CronJob metadata:name: k8s-springboot-demonamespace: rz-dt spec:failedJobsHistoryLimit: 3 #执行失败job任务保留数量successfulJobsHistoryLimit: 5 …

etcd的使用

什么是etcd ETCD是一个分布式、可靠的key-value存储的分布式系统&#xff0c;用于存储分布式系统中的关键数据&#xff1b;当然&#xff0c;它不仅仅用于存储&#xff0c;还提供配置共享及服务发现&#xff1b;基于Go语言实现 。 etcd的特点 完全复制&#xff1a;集群中的每…

Spring Boot 系列1 -- 概念、创建和使用

目录 1. 什么是Spring Boot? 2. Spring Boot 的优点 3. Spring Boot 项目的创建 3.1 使用IDEA创建 3.2 网页版创建 4. 项目目录和项目运行 4.1 项目目录 4.2 运行项目 4.3 使用Spring Boot项目实现网页输出Hello World 5. 路径问题 1. 什么是Spring Boot? Spring …

【vue+vant使用请求loading】【vant如何关闭Toast】

vuevant使用请求loading 文档&#xff1a;https://vant-contrib.gitee.io/vant/v2/#/zh-CN/toast 需求&#xff1a;目前需求是在请求中使用toast-loading&#xff0c;请求完成后关闭这个toast&#xff1b; 问题&#xff1a;vant如何关闭toast呢&#xff1f; 解决&#xff1a…

【UE4 C++】05-添加组件

在“SCharacter.h”中添加如下代码&#xff0c;从而为“SCharacter”添加弹簧臂和摄像机组件。 在“SCharacter.cpp”中添加如下代码 重新生成解决方案 打开虚幻编辑器&#xff0c;此时在视口中可以看到新添加的摄像机组件&#xff0c;摄像机处于世界坐标原点&#xff0c;并不会…

VisProg解析:根据自然语言指令解决复杂视觉任务

VisProg&#xff1a;根据自然语言指令解决复杂视觉任务 1. 介绍 VisProg 是一种神经符号系统&#xff0c;可以根据自然语言指令解决复杂的组合视觉任务。VisProg 使用 GPT3 的上下文学习能力来生成 Python 程序&#xff0c;然后执行这些程序以获得解决方案和全面且可解释的基…

前端学习——css盒子模型、css3新特性、伪类、布局0711TODO

样式还是得具体使用才能理解&#xff0c;不然会忘记也理解不透彻&#xff1b;还有定位&#xff0c;元素溢出&#xff0c;浮动&#xff0c;布局水平&垂直对齐&#xff1a; css3新特性 1过渡 2 动画 3 2D、3D转换 伪类 三种定位方式 弹性布局/栅格布局

VS+QT+OpenCV+C++多线程多摄像头视频监控采集窗体

程序示例精选 VSQTOpenCV多线程多摄像头视频监控采集窗体 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQTOpenCV多线程多摄像头视频监控采集窗体>>编写代码&#xff0c;代码…

【Matlab】智能优化算法_算数优化算法AOA

【Matlab】智能优化算法_算数优化算法AOA 1.背景介绍2.数学模型2.1 初始化阶段2.2 勘探阶段2.3 开采阶段 3.文件结构4.伪代码5.详细代码及注释5.1 AOA.m5.2 func_plot.m5.3 Get_F.m5.4 initialization.m5.5 main.m 6.运行结果7.参考文献 1.背景介绍 算术是数论的基本组成部分&a…

MySQL的表操作DML,DDL

建表 mysql> create table work(-> dept_id int(11) not null comment 部门号,-> staff_id int(11) not null comment 职工号,-> work_time date not null comment 工作时间,-> wage float(8.2) not null comment 工资,-> poli_face varchar(20) not null …

软考A计划-系统集成项目管理工程师-项目成本管理-中

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…