Shell笔记(1)

变量

1、变量类型

  • 局部变量:在命令或脚本中定义,不能在其他程序访问。
  • 环境变量:所有程序都能访问环境变量,必要时,shell脚本可以定义变量。
  • shell变量:shell程序设置的特殊变量。可以是前两者。

2、变量命名规则

  • 变量名与等号之间不能有空格

    1、命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    2、中间不能有空格,可以使用下划线 _。
    3、不能使用标点符号。
    4、不能使用bash里的关键字(可用help命令查看保留关键字)。
  • 变量赋值方法:

    1、显式赋值: yourName="haha"
    2、使用语句赋值:列出/etc 下文件名
    for file in `ls /etc`
    for file in $(ls /etc)

3、使用变量

1、使用时加上 ${Var} 即可
例子:
${yourName}
2、定义过的变量可以重新赋值

4、Shell 字符串

1、单引号
单引号里面的任何字符都会原样输出。转义符也没用。就是说单引号里面没有变量。都是字符串。
str='heihei'
2、双引号
双引号里面可以有变量,可以出现转义字符。
例子:
your_name="qinjx"
* greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
上面* 的也正常输出。""不仅里面有变量,还可以对里面的双引号套娃理解。
运行shell脚本的两种方法:
./scriptName.sh
/bin/sh scriptName.sh 作为解释器参数运行

5、字符串操作

1、获取字符串长度: echo ${#strName}
2、提取字串:echo ${strName:1:4}
3、查找子字符串:String="alibaba is a great company" echo `expr index "$string" is`
注意使用的时 反引号 里面的双引号
* 含有指令的赋值,要用 `` 括起来 上面的 输出是 6

6、Shell 数组变量

  • bash shell 只支持一维数组,下表从0开始

  • 数组元素用 空格或者换行 分开

    集中定义:array_name=(value0 value1 value2)
    单独定义:array_name[0]=val0
  • 数组操作:

    1、获取数组的元素:
    单个:${array_anme[0]}
    全部:${array_name[@]}
    2、数组长度:
    总长度:${#array_name[@]} ${#array_name[*]}
    单个元素长度:
    ${#array_name[n]}

7、Shell 注释

只能单行注释
或者
{} q

参数传递

Shell 传递参数

  • 执行脚本时,可以在命令后面添加参数。脚本内获取参数的格式为: $n n从0开始

  • $0 是文件名,实际参数还是从 1 开始

    echo "Shell 传递参数实例!";
    echo "执行的文件名:$0";
    echo "第一个参数为:$1";
    要添加执行权限
    $ chmod +x test.sh
    $ ./test.sh 1 2 3
    Shell 传递参数实例!
    执行的文件名:test.sh
    第一个参数为:1

1、参数处理符号

参数处理 说明
$# 传递到脚本的参数个数
|"*"用「"」括起来的情况、以"12 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程 ID
$! 后台运行的最后一个进程的 ID
@|* 相同,但是使用时加"" ,并在引号中显示参数。如"@"""1" "2""n" 的形式输出所有参数。
$- 显示shell使用的当前选项,与 set 命令相同
$? 显示命令最后退出状态。0表示没有错误

2、 @的区别

只有在双引号中体现出来假设在脚本运行时写了三个参数 123,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)
*相当于传递了一个参数,@相当于多个
for i in "$*"; do
echo $i
done
输出:val0 val1 val2
-------------------------------------
for i in "$@"; do
echo $i
done
输出:
val0
val1
val2

数组

Shell 数组

  • bash 数组只能是一维数组,初始化时不需要定义数组大小
  • 下表从 0 开始
  • 用()表示,中间用空格或者换行分开

1、数组的@

效果一直,不会换行。参数会换行。其他请参照shell 变量那一节操作。
posted @   心是冰冰的  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示