【Shell】part1-Shell-基础入门篇

2024-05-02 08:52
文章标签 基础 shell 入门篇 part1

本文主要是介绍【Shell】part1-Shell-基础入门篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

part1-基础入门

HelloWorld

创建,编写,运行 Shell 脚本

vim test.sh#!/bin/bash
echo "Hello World !"# 1.作为可执行程序运行
chmod a+x ./test.sh  
#使脚本具有执行权限
./test.sh  
#执行脚本# 2.作为解释器参数运行
/bin/sh test.sh
/bin/php test.php

变量

变量赋值

定义变量时,变量名不加美元符号($,PHP语言中变量需要)

your_name="runoob"# 
for file in `ls /etc`for file in $(ls /etc)

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可

your_name="qinjx"
echo $your_name
echo ${your_name}# 
for skill in Ada Coffe Action Java; doecho "I am good at ${skill}Script"
done

删除变量

#!/bin/sh
myUrl="https://www.google.com"
unset myUrl
echo $myUrl

变量类型

# 字符串
my_string='Hello, World!'或者my_string="Hello, World!"# 整数
declare -i my_integer=42# 数组# 索引数组
my_array=(1 2 3 4 5)# 关联数组
declare -A associative_array
associative_array["name"]="John"
associative_array["age"]=30# 环境变量
echo $PATH# 特殊变量
特殊变量在 Shell 中具有特殊含义
$0 表示脚本的名称,$1, $2, 等表示脚本的参数。
$
#表示传递给脚本的参数数量,$? 表示上一个命令的退出状态等

Shell字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。


# 单引号
str='this is a string'
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。# 双引号
your_name="runoob"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str
双引号里可以有变量
双引号里可以出现转义字符# 拼接字符串
your_name="runoob"# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
#单引号中变量无效
echo $greeting_2  $greeting_3# 获取字符串长度
string="abcd"
echo ${
#string}   
# 输出 4# 提取子字符串
string="runoob is a great site"
echo ${string:1:4} 
# 从第 2 个字符开始截取 4 个输出 unoo# 查找子字符串
string="runoob is a great site"
echo `expr index "$string" io`  
# 查找字符 i 或 o 的位置输出 4

Shell 数组`

bash支持一维数组(不支持多维数组),并且没有限定数组的大小,支持下标访问.


# 定义数组
array_name=(value0 value1 value2 value3)# 读取数组
${数组名[下标]}
valuen=${array_name[n]}
echo ${array_name[@]}# 获取数组的长度
取得数组元素的个数
length=${#array_name[@]} 或者 length=${#array_name[*]}
取得数组单个元素的长度
length=${#array_name[n]}

注释

# 单行注释就是#
# 多行注释 ': + 空格 + 单引号'
: '
注释内容...
注释内容...
注释内容...
'

Shell 传递参数

使用 $1、$2 等来引用传递给脚本的参数,其中 $1 表示第一个参数,$2 表示第二个参数, $0 为执行文件名

# 编写脚本
#!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";# 执行脚本
$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
特殊字符说明
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@ ∗ 相同,但是使用时加引号,并在引号中返回每个参数。如 " *相同,但是使用时加引号,并在引号中返回每个参数。如" 相同,但是使用时加引号,并在引号中返回每个参数。如"@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

编写脚本

#!/bin/bash
echo "Shell 传递参数实例!";
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

执行脚本

$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3

这篇关于【Shell】part1-Shell-基础入门篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/953873

相关文章

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou