linux基本操作

本文介绍了Shell脚本的基础知识,包括变量、循环、字符串操作、数组使用、参数传递、运算符、函数定义等核心内容,适合初学者入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面展示了一些最基本的shell命令,部分示例从菜鸟教程 上摘抄,也可以去菜鸟教程查看更加详细的内容。

我们在保存完脚本之后,要

chmod +x ./test.sh  

或者

chmod 777 ./test.sh

使脚本具有执行权限

变量

变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)
 #!/bin/bash
   echo "hello,world!"

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

unset variable_name

For循环

#!/bin/bash
for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

字符串

  • 获取字符串长度
string="abcd" 
echo ${#string} #输出 4
  • 提取子字符串
    以下实例从字符串第 2 个字符开始截取 4 个字符:
string="runoob is a great site" 
echo ${string:1:4} # 输出 unoo
  • 查找子字符串
    查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
string="runoob is a great site" 
echo `expr index "$string" io` # 输出 4

数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

#! /bin/bash
users=(zhangsan lisi wangwu zhaoliu)
for user in ${users[*]};do
  echo ${user}
done

还可以单独定义数组的各个分量:

array_name[0]=value0 
array_name[1]=value1
array_name[n]=valuen

可以不使用连续的下标,而且下标的范围没有限制。
读取数组

读取数组元素值的一般格式是: ${数组名[下标]}

echo ${array_name[@]}

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

# 取得数组元素的个数 
length=${#array_name[@]} 
# 或者 
length=${#array_name[*]} 
# 取得数组单个元素的长度 
lengthn=${#array_name[n]}

传参

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
./param.sh 1 2 3

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

执行脚本,输出结果如下所示:

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

基本运算符

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"

两点注意:

  • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。

  • 完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边

    算术运算符
    下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
    在这里插入图片描述
    关系运算符
    关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
    下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
    在这里插入图片描述
    布尔运算符
    下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
    在这里插入图片描述

逻辑运算符
以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
在这里插入图片描述

字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
在这里插入图片描述
文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性。
属性检测描述如下:
在这里插入图片描述

printf命令

printf format-string [arguments...]

参数说明:
format-string: 为格式控制字符串
arguments: 为参数列表。
接下来,我来用一个脚本来体现printf的强大功能:

#!/bin/bash 
# author:菜鸟教程
# url:www.runoob.com 
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876 

执行脚本,输出结果如下所示:
姓名 性别 体重kg
郭靖 男 66.12
杨过 男 48.65
郭芙 女 47.99
%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。

函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

#!/bin/bash 
# author:菜鸟教程
# url:www.runoob.com 
demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕-----"

输出结果:
-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----

下面定义一个带有return语句的函数:

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
funWithReturn(){ 
    echo "这个函数会对输入的两个数字进行相加运算..." 
    echo "输入第一个数字: " read aNum 
    echo "输入第二个数字: " read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !" 
    return $(($aNum+$anotherNum))
} 

funWithReturn echo "输入的两个数字之和为 $? !"

输出类似下面:
这个函数会对输入的两个数字进行相加运算…
输入第一个数字:
1
输入第二个数字:
2
两个数字分别为 1 和 2 !
输入的两个数字之和为 3 !

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
带参数的函数示例:

#!/bin/bash 
# author:菜鸟教程 
# url:www.runoob.com 
funWithParam(){ 
    echo "第一个参数为 $1 !" 
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !" 
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !" 
} 

funWithParam 1 2 3 4 5 6 7 8 9 34 73

第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

注意,$ 10 不能获取第十个参数,获取第十个参数需要 10 。 当 n > = 10 时 , 需 要 使 用 {10}。当n>=10时,需要使用 10n>=10使{n}来获取参数。
另外,还有几个特殊字符用来处理参数:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值