当前位置:网站首页>shell programming conventions and variables
shell programming conventions and variables
2022-08-01 21:35:00 【direction of light 79】
shell
第一行为“#!/bin/bash”,脚本申明(默认解释器):表示此行以下的代码语句是通过/bin/bash程序来执行.
还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect
注释信息:以“#”开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行
可执行语句:如echo命令,用于输出“ ”之间的字符串
先给text.sh添加执行权限
相对路径
绝对路径
Sh 脚本路径
source脚本文件路径
- source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令
- 不需要x权限,也需要使用相对路径或绝对路径
3.4 其他方法
sh < text.sh
或者
cat text.sh |sh(bash)
或者
bash text.sh
三、重定向与管道操作
1、交互式硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错信息
2、重定向操作
2.1 重定向操作
2.2 错误重定向
错误重定向指的是将执行命令过程中出现的错误信息(如选项或参数错误等)保存到指 定的文件,而不是直接显示在屏幕上.错误重定向使用“2>”操作符
作用:
- 在实际应用中,错误重定向可用来收集程序执行的错误信息,为排错提供依据
- 还可以将无关紧要的错误信息重定向到空文件/dev/null 中,以保持脚本输出的简洁
使用“2>”操作符时,会像使用“>”操作符一样覆盖目标文件的内容,
若要追加内容而不是覆盖文件,则应改用“2>>”操作符
当命令输出的结果可能既包括标准输出(正常执行)信息,又包括错误输出信息时,可以使用操作符“>”“2>”将两类输出信息分别保存到不同的文件,也可以使用“&>”操作符将两类信息输出信息保存到同一个文件
/dev/null:把它看作"黑洞",所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然 而 /dev/null 对命令行和脚本都非常的有用
echo kgc > /dev/null
cat /dev/null #什么信息也看不到
&>和>&符号
&表示等同于的意思
例1:把正确和错误的消息输入到相同的位置
1>&2 把标准输出重定向到标准错误
2>&1 把标准错误重定向到标准输出
cat /tmp error.txt >a.txt 2>&1 #查看erro.txt,Put both right and wrong information ina.txt
或:
cat /tmp error.txt 2>b.txt 1>&2
2、把正确的和错误的信息都保存到一个文件(混合模式)
3、另一种方法,把正确的和错误的信息都保存到一个文件(混合模式)
3、管道操作
管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道.
在 Shell 脚本应用中,管道操作通常用来过滤所需要的关键信息.
- $bash 表 示 系 统 提 示 符 , 表示系统提示符,表示系统提示符, 表示此用户为普通用户,超级用户的提示符是#
- bash是shell的一种,是linux下最常用的一种shell
- $bash的意思是执行一个子shell,此子shell为bash.
grep "^zhangsan" /etc/passwd | awk -F: '{print $1,$7}'
#打印出/etc/passwdIt starts with the next three
awk -F: '{print $1,$7}以冒号:分隔,输出第1和第7个字段,其中-F部分用来指定分隔符号
1、打印出/etc/passwdIt starts with the next three,并只显示第1和第7个字段
2、Print out which users can log inshell的用户,and only display the first1、6、7行,同一行命令中可以使用多个管道
3、Filter out lines ending with root
四、Shell变量的作用、类型
1、变量的作用
用来存放系统和用户需要使用的特定参数(值)
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
2、变量的类型
- 自定义变量:由用户自己定义、修改和使用
- 特殊变量:环境变量、只读变量、位置变量、预定义变量
3、自定义变量
变量名=变量值 #变量名以字母或下划线开头,区分大小写,建议全大写
echo $变量名 #查看变量的值
等号(=)用来给变量赋值
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值
3.1 引用变量
echo选项
- echo-n表示不换行输出
- 使用echo -e输出转义字符,将转义后的内容输出到屏幕上
- 常用的转义字符如下:
\c不换行输出,在"\c"后面不存在字符的情况下,作用相当于echo-n
\n 换行
\t 转义后表示插入tab,即制表符
注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符.如\s将输出“$”符号,而不当做是变量引用
3.2 赋值时使用引号
- 双引号:允许通过$符号引用其他变量值
- 单引号:禁止引用其他变量值, $视为普通字符
- 反撇号:命令替换,提取命令执行后的输出结果,``和$(…)作用相同
1、双引号允许通过$符号引用其他变量值
2、单引号禁止引用其他变量值, $视为普通字符
3、查找useraddlocation and list its detailed properties
ls -lh `which useradd`
#It is equivalent to executing two commands in succession,先通过which useradd命令查找出useradd命令的程序位置,然后根据查找结果列出文件属性
4、查询提供useraddThe location of the configuration file installed by the package of the command program(从里到外先后执行替换)
5、查看当前日期
3.3 交互式定义变量(read)
read命令获取输入内容
-p:提示用户的信息
-n:定义字符数
-s:不显示用户输入的内容,常用于输入密码read -s -p "input your password:" pass
-t:定义超时时间,超过多长时间没输自动退出从文件读取内容赋值给变量(默认10s)
stty -echo //关闭屏幕回显
stty echo //开启屏幕回显
1、Read content from text and assign it to a variable
read -p 提示信息 变量名
echo $变量名
2、在脚本中编写,在命令行实现read获取
3.4 设置变量的作用范围(export)
格式1:export 变量名
格式2:export 变量名=变量值
默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量.当进入子程序或者新的子Shell环境时,局部变量将无法再使用.
例如:直接执行Bash进入下一个新的子Shell脚本后,将无法引用父级Shell环境中定义的变量
定义变量——查看当前定义的变量值
In order to use user-defined variables in all subShell环境中能够继续使用,减少重复设置工作,可以通过内部命令Export将指定的变量到处为全局变量.可以同时指定多个变量名称作为参数(不需要使用$符号),变量名之间以空格分隔.
使用export导出全局变量的同时,也可以为变量进行赋值,这样在新定义全局变量时就不需要提前进行赋值.
例如:执行以下操作可以直接新建一个名为lc的全局变量
3.5 数值变量的运算
Shell变量的数值运算多用于脚本程序的过程控制.在Bash Shell环境中,只能进行简单的整数运算,不支持小数运算.整数值的运算主要通过内部命令expr进行,基本格式如下所示.需要注意的是,运算符与变量之间必须有至少一个空格.
- 运算内容:加(+)、减(-)、乘(*)、除(/)、取余(%)
- 运算符号:( ( ) ) 和 (( ))和(())和[]
- 运算命令: expr和let
- 运算工具: bc(计算器)
常用的几种运算符
3.5.1 expr命令
expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串.
整数变量的运算
expr 变量1 运算符 变量2 [运算符 变量3]...
常量运算
变量运算
使用脚本执行
3.5.2 let命令
let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量.如果表达式中包含了空格或其他特殊字符,则必须引起来.
边栏推荐
- sizeof的详细解说和与strlen的区别
- shell编程规范与变量
- 基于php在线学习平台管理系统获取(php毕业设计)
- P7215 [JOISC2020] 首都 题解
- C Pitfalls and Defects Chapter 5 Library Functions 5.5 Library Function Signal
- C专家编程 前言
- 2022-08-01 第五小组 顾祥全 学习笔记 day25-枚举与泛型
- C专家编程 第1章 C:穿越时空的迷雾 1.1 C语言的史前阶段
- 基于php在线音乐网站管理系统获取(php毕业设计)
- CS-NP白蛋白包覆壳聚糖纳米颗粒/人血清白蛋白-磷酸钙纳米颗粒无机复合材料
猜你喜欢
随机推荐
Based on php film and television information website management system acquisition (php graduation design)
pytest:开始使用
JVM内存结构详解
牛血清白蛋白-葡聚糖-叶黄素纳米颗粒/半乳糖白蛋白磁性阿霉素纳米粒的制备
C pitfalls and pitfalls Chapter 7. Portability pitfalls 7.10 Free first, then realloc
图片识别商品接口 API:天猫淘宝
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.3 The Standard I/O Library and the C Preprocessor
Chapter 12, target recognition of digital image processing
JS Improvement: Handwritten Publish Subscriber Model (Xiaobai)
Unity Shader 常规光照模型代码整理
空间数据库开源路,超图+openGauss风起禹贡
2022牛客多校联赛第五场 题解
Anacoda的用途
Scala练习题+答案
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.4 K&R C
How to encapsulate the cookie/localStorage sessionStorage hook?
附录A printf、varargs与stdarg A.1 printf函数族
Shell编程条件语句
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.5 ANSI C Today
ModuleNotFoundError: No module named ‘yaml‘