首页 > 系统相关 >shell基础(变量)

shell基础(变量)

时间:2024-01-09 12:00:41浏览次数:33  
标签:shell 变量 基础 echo sunday test root

shell基础

1、认识shell

  • Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
  • Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
  • shell是一种解释型语言,这种语言经过编写后不经过任何编译就可以执行,是一种脚本语言。和编译型语言是执行前翻译不同,解释型语言的程序是执行时翻译,所以效率要差一些。

shell基础(变量)_变量名

  • CentOS系统中支持很多shell,可以通过查看/etc/shells文件,查看所支持的shell,目前大多数的Linux基本都使用bash
[root@wei ~]# cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
  • bash shell有两种工作模式:
  • 互动模式 和 脚本模式。
  • 脚本模式效率更高,可以实现自动化。
  • 编写第一个shell脚本:
[root@sunday-test shell-script]# cat HelloWorld.sh
#!/bin/bash                       //是一个标记,告诉系统执行这个文件需要的解释器
# this line is a comment   // “#”号开头的行代表注释
echo "Hello World"
  • 运行脚本有两种方法:
1、使用bash命令执行
[root@sunday-test shell-script]# bash HelloWorld.sh
Hello World
# “.”号和source命令也都可以执行脚本,且不需要可执行权限
[root@sunday-test shell-script]# . HelloWorld.sh
Hello World
[root@sunday-test shell-script]# source HelloWorld.sh
Hello World
2、给脚本添加可执行权限,然后直接就可以执行了
[root@sunday-test shell-script]# chmod o+x HelloWorld.sh
[root@sunday-test shell-script]# ./HelloWorld.sh
Hello World

2、使用变量

变量

变量就是其值可以变化的量。从变量的本质来说,变量名是指向一片用于存储数据的内存空间。变量有局部变量、环境变量之分。在脚本中,往往需要使用变量来存储有用信息,比如文件名、路径名、数值等,通过这些变量可以控制脚本的运行行为。

1、局部变量: 是指在某个shell中生效的变量,对其他shell来说无效,局部变量的作用域被限定在声明它们的shell中,可以使用local内建命令来“显式”的声明局部变量,但仅限于函数内使用。

2、环境变量: 通常又称“全局变量”,以区别于局部变量。在shell脚本中,变量默认就是全局的,为了让子shell继承当前shell的变量,可以使用export命令将其定义为环境量。

  • bash中默认包含有几十个预设的环境变量,下面介绍一些常用的:
# BASH: Bash shell的全路径。
[root@sunday-test ~]# echo $BASH
/bin/bash

# BASH_VERSION : bash shell的版本
[root@sunday-test ~]# echo $BASH_VERSION
4.2.46(1)-release

# EUID:记录当前用户的UID。
[root@sunday-test ~]# echo $EUID
0

# FUNCNAME:在用户函数体内部,记录当前函数体的函数名。
[root@sunday-test shell-script]# cat funcname.sh
#!/bin/bash
funcname() {
echo $FUNCNAME
}
funcname
[root@sunday-test shell-script]# source funcname.sh
funcname

# HISTCMD:记录下一条命令在history命令中的编号
# HISTFILE:记录history命令记录文件的位置
# HISTFILESIZE:设置HISTFILE文件记录命令的行数
# HISTSIZE:设置命令缓冲区的大小
# HOSTNAME:设置主机名

# HOSTTYPE:展示主机的架构
[root@sunday-test shell-script]# echo $HOSTTYPE
x86_64

# MACHTYPE:主机类型的GNU标识,这种标识有统一的结构。一般来说是“主机架构-公司-系统-gnu”
[root@sunday-test shell-script]# echo $MACHTYPE
x86_64-redhat-linux-gnu

# LANG:设置当前系统的语言环境。
[root@sunday-test shell-script]# echo $LANG
zh_CN.UTF-8
[root@sunday-test shell-script]# LANG=en_US.UTF-8
[root@sunday-test shell-script]# echo $LANG
en_US.UTF-8

# PWD:记录当前目录
# OLDPWD:记录之前目录
# PATH:代表命令的搜索路径,非常重要

变量命名

shell中的变量必须以字母或者下划线开头,后面可以跟数字、字母和下划线,长度没有限制,区分大小写。
  • 正确的变量命名:
firstname
FIRSTNAME
_helloworld
big_data
Fullname
Person01
  • 错误的变量命名:
51pally    # 变量不能以数字开头
*badname  # 变量不能以特殊字符开头
PS1      # 变量不能和shell的预设变量名重名
for     # 变量不能使用shell的关键字

变量赋值和取值

定义变量:变量名=变量值

  • 注意点1:变量名和变量值之间用等号紧紧相连,之间没有任何空格
[root@sunday-test ~]# name=john
[root@sunday-test ~]# name=  john
bash: john: command not found...
  • 注意点2:当变量值中有空格时必须用引号括起,否则会出现错误,可以是双引号,也可以 是单引号
[root@sunday-test ~]# name="li si"
[root@sunday-test ~]# name=li si
bash: si: command not found...
Similar command is: 'ci'
  • 变量的取值很简单,在变量名前加{}。建议用后者
[root@sunday-test ~]# echo $name
li si
[root@sunday-test ~]# echo ${name}
li si
  • 取消变量:取消变量使用unset,后面跟变量名。函数也是可以被取消的,unset后面也是可以跟上函数名来取消函数的。
[root@sunday-test ~]# unset name
  • 从键盘输入内容为变量赋值
read  [-p  "提示信息"]  变量名

特殊变量

1、位置参数

# shell中还有一些预先定义的特殊只读变量,它们的值只有在脚本运行时才能确定。
$0:代表脚本本身名字
$1----$9:第一个位置参数-------第9个位置参数
$#:脚本参数的个数总和
$@:表示脚本的所有参数
$* :表示脚本的所有参数

[root@sunday-test shell-script]# cat posion.sh
#!/bin/bash
echo "这个脚本的名字是:$0"
echo "参数一共有$#"
echo "参数的列表是: $@"
echo "参数的列表是: $*"
echo "第一个参数是: $1"
echo "第二个参数是: $2"
echo "第三个参数是:$3"

[root@sunday-test shell-script]# ./posion.sh a b c
这个脚本的名字是:./posion.sh
参数一共有3
参数的列表是: a b c
参数的列表是: a b c
第一个参数是: a
第二个参数是: b
第三个参数是:c

2、脚本或者命令返回值:$?

# 正常退出的命令和脚本应该返回值为0,任何非0的返回值都表示命令未正确退出或未正常执行
[root@sunday-test ~]# ifcofj
bash: ifcofj: 未找到命令...
[root@sunday-test ~]# echo $?
127
[root@sunday-test ~]# ping -c 1 192.168.5.23
PING 192.168.5.23 (192.168.5.23) 56(84) bytes of data.
From 192.168.5.141 icmp_seq=1 Destination Host Unreachable
--- 192.168.5.23 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
[root@sunday-test ~]# echo $?
1


标签:shell,变量,基础,echo,sunday,test,root
From: https://blog.51cto.com/u_16206331/9159409

相关文章

  • Java 基础 - 注解机制详解
    注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它是框架学习和设计者必须掌握的基础。注解基础注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。......
  • 快乐学Python,Python基础之组织代码「类与对象」
    在上一篇文章中,我们了解了函数。这一篇文章我们来了解一下Python中另外一个重要的概念:类与对象。1、类与对象(1)类与对象有什么关系?你可能会奇怪,为什么要叫类与对象呢?是两个不同的东西吗?简单来说,类代表一个类别,而对象则代表类的一个实例。比如我们在变量与数据类型中学习的整型变......
  • 初识JVM​-JVM基础概念
    什么是JVMJVM全称是JavaVirtualMachine,中文译名Java虚拟机。JVM的功能01解释和运行对字节码文件中的指令,实时的解释成机器码,让计算机执行。02内存管理自动为对象、方法等分配内存自动的垃圾回收机制,回收不再使用的对象03即时编译对热点代码进行优化,提升执行效率。Java语言如果不......
  • mysql8.0全局变量持久化
    在MySQL数据库中,全局变量可以通过SETGLOBAL语句来设置。例如,设置服务器语句超时的限制,可以通过设置系统变量max_execution_time来实现:SETGLOBALMAX_EXECUTION_TIME=2000;使用SETGLOBAL语句设置的变量值只会临时生效,数据库重启后,服务器又会从MySQL配置文件中读取变量的默认值......
  • shell基础
    如何编写并执行一个Shell脚本文件?[root@sunday-testshell-script]#catHelloWorld.sh#!/usr/bin/bash//是一个标记,告诉系统执行这个文件需要的解释器#thislineisacomment1//“#”号开头的行代表注释echo"HelloWorld"//指令要使脚本可执行:ch......
  • Mac每次都要执行source ~/.bash_profile配置的环境变量才生效
    ~/.bash_profile中配置环境变量,每次重启终端后配置不生效.需要重新执行:$source~/.bash_profile解决办法zsh加载的是~/.zshrc文件,而‘.zshrc’文件中并没有定义任务环境变量。在~/.zshrc文件最后,增加一行:source~/.bash_profile如果这篇文章对你有用,可以关注本人微......
  • PyTorch 基础篇(1):Pytorch 基础
    Pytorch学习开始入门的材料来自两个地方:第一个是官网教程:WELCOMETOPYTORCHTUTORIALS,特别是官网的六十分钟入门教程DEEPLEARNINGWITHPYTORCH:A60MINUTEBLITZ。第二个是韩国大神YunjeyChoi的Repo:pytorch-tutorial,代码写得干净整洁。目的:我是直接把Yunjey的教程的......
  • Linux shell编程学习笔记38:history命令
    目录0 前言1 history命令的功能、格式和退出状态1.1 history命令的功能1.2 history命令的格式1.3退出状态2 命令应用实例2.1 history:显示命令历史列表2.2history-a:将当前会话的命令行历史追加到历史文件~/.bash_history中2.3history-c:删除所有条目从而清空历史列表2.4 ......
  • 第二节变量、注释、数据类型​
    变量变量命名规范:只能是数字、字母、下划线。只能以字母、下划线开头。不能是python关键字、内置函数名。建议:见名知意使用小写字母、下划线、数字组成。多词组成的变量名用下划线分割,不使用驼峰命名法。除循环计数或在极小的范围内外,不使用单个字母。例子1:x=12_y='abc'12xx=......
  • 第一章基础
    一、矩形建立1、直接法a=[1,2,3;4,5,6];%相同行是逗号,不同行分号或空格2、拼接法a=[1,2;3,4];b=[5,6;7,8];c=[a;b];%拼接矩阵是竖向相接的12345678c=[a,b];%拼接矩阵是横向相接的12563478总结:要将两个行向量A和B拼接成一个行向量C,可以使用以下语......