shell杂谈

本文介绍了Shell编程的基础知识,包括脚本格式、变量管理、参数传递及操作符等内容,并提供了实例演示。

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

与linux打交道,会经常使用shell来帮助我们处理一些事儿,刚刚接触shell编程,因此把学到的都记录在这里

1.shell编程格式三要素(个人总结,不一定准确)

a.命名要求:文件名符合xxx.sh(或者xxx.php)的格式,表示这是一个shell脚本,或者说扩展名必须为:.sh(或者.php)

b.脚本内第一行代码必须指定解释器,通常为:#!/bin/bash

c.赋予该脚本可执行的权限,即通过命令chmod添加可执行权限(chmod +x xxx.sh)

2.shell变量

a.命令规则

  • 变量名和等号之间不能有空格(例如:a='this is a variable')
  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
  • 为了表达清楚变量的意思,可以使用下划线(_)衔接多个单词来命名一个变量,或者驼峰式命令,推荐使用前者
  • 不能使用标点符号(和其他编程格式保持一致)
  • 不能使用shell里的关键字(可用help命令查看保留关键字,不同版本的shell会有微小的差别)

b.变量赋值

  • 显示赋值,或者称为直接赋值(例如:a=1, b='string test')
  • 隐式赋值(将变量或者表达式等无法直接或者结果的语句赋值,例如:a=`ls -al /root`)
  • 重复赋值(可以为一个已存在的变量重新赋值)
  • 设置为只读变量(readonly a)
  • 删除变量(例如:unset a)
c.变量引用

  • 引用变量时,用$加变量名,或者${variable},例如:(a=123, echo $a 或者${a},推荐使用后者)
d.字符串

  • 单引号字符串(例如a='abcdef',只能原样输出)
  • 双引号字符串(例如a="abcdef",可以引用变量,如:a="apple"; b="this is a $a" ; echo $b)
  • 获取字符串长度(例如 a="test string length ";  echo ${#a})
  • 截取字符串(a="test string substring";  echo ${string:1:10})
  • 字符串拼接,这和其他语言不同,shell只需要把要拼接的串放一起即可(例如:a='abcd'; b=" jgk"; 要把a、b和其他字符串拼接在一起,只需要按照如下处理  c=$a" efg"$b)
  • 字符串转数组,该项比较特殊,通常一个字符串中含有多个相同的特殊字符(如空格、/ 、$、#,可以作为分隔符)时,可用字符串直接转数组(例如:a="a b c d"; arr=($a), 再比如:a="a/b/cd" arr=${a//// }; array=($arr))

e.数组

  • 定义:数组是用括号包裹起来,数组元素之间是以空格分隔开的集合例如:a=(1 2 3 4 5),数组内元素可以是不同数值类型的值
  • 读取数组的值:${array[n]},编号从0开始,可以是变量
  • 读取数组所有的值${array[@]}
  • 获取数组长度${#array[@]} 或者${#array[*]}
3.参数传递

      通常为了实现某个功能,我们不知道需要处理的数据会是什么,或者说我们无法预见我们的入参数据,那么我们可以在执行命令的时候再传入参数,在shell脚本中,参数传递带给我们极大的便利,下面我们将详细说明参数传递在shell中怎么使用的。

     在执行脚本时,如果传入参数,在执行脚本内部使用这些参数时,需要在在变量钱加$符号,通常格式如下 :$0 $1 $2...$n

  • $0:表示可执行脚本文件
  • $1:表示第1个参数 
  • $n:表示第n个参数
  • 特殊符号说明:

  1. $#:执行脚本时参数总的个数
  2. $!:后台运行的最后一个进程的ID号
  3. $$:运行脚本的当前进程ID
  4. $*:以一个字符串的形式显示当前脚本的所有参数
  5. $?:显示上一条命令执行后的退出状态,0表示正常退出、非0表示异常退出
  6. $-:显示shell使用的当前选项
  7. $@:和$*的功能类似,$*表示将所有参数以一个字符串打印出来,$@表示将所有参数分别打印出来

4.操作符

shell默认不提供运算相关的命令,不过可以通过其他工具来实现,较为常用的是expr,使用方式直接上代码,创建一个脚本文件test.sh

#!/bin/bash
val=`expr $1 + $2`
echo "the sum of the two param are :$val"
val=`expr $1 - $2`
echo "the difference between two param is :$val"
val=`expr $1 / $2`
echo "the division of the two is :$val"
val=`expr $1 \* $2`
echo "the multiply of the two params are :$val"
val=`expr $1 % $2`
echo "the remainder is :$val" 
if [ $1 == $2 ]; then
   echo "param one equals param two"
fi

if [ $1 != $2 ]; then
   echo "param one not equals param two"
fi

使用chmod +x test.sh,然后执行 sh test.sh 15 3


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

banche168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值