🎊专栏【玩转Linux操作】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【Counting Stars 】
欢迎并且感谢大家指出小吉的问题🥰
文章目录
- 🍔概述
- ⭐注意
- ⭐示例
- 🏳️🌈然后运行
- 🏀当前路径下执行
- 🏀绝对路径下执行
- 🏀家目录下执行
- 🏀使用解释器执行
- 🍔shell注释
- ⭐单行注释
- ⭐多行注释
- 🍔shell变量
- ⭐定义变量
- ⭐使用变量
- ⭐只读变量
- ⭐删除变量
- ⭐自定义变量(局部变量)
- ⭐环境变量(全局变量)
- 🎈把自定义变量改为环境变量
- 🎈把环境变量改为自定义变量
- 🍔默认变量
- 🍔字符串
- 🎁单引号和双引号的区别
- ⭐其他参数相关变量
- ⭐获取字符串长度
- ⭐提取字串
- 🍔数组
- ⭐定义
- ⭐读取数组中某个元素的值
- 🎈格式
- ⭐读取整个数组
- 🎈格式
- ⭐读取数组的长度
- 🎈格式
🍔概述
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。
Linux中常见的shell脚本有很多种,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- zsh
- …
Linux系统中一般默认使用bash,所以接下来讲解bash中的语法。
⭐注意
文件开头需要写#! /bin/bash
,指明bash为脚本解释器。
⭐示例
新建一个test.sh
文件
进入test.sh
后,输入
#! /bin/bash
echo "hello"
🏳️🌈使用ll
命令查看权限,发现test.sh
文件没有可写的权限
咱们来给它赋予权限
chmod +x test.sh
🏳️🌈然后运行
🏀当前路径下执行
./test.sh
🏀绝对路径下执行
/home/acs/test.sh
🏀家目录下执行
~/test.sh
🏀使用解释器执行
bash test.sh
🍔shell注释
⭐单行注释
每行中#
后面的内容都是注释
# 这是一行注释
echo 'Hello World' # 这也是注释
⭐多行注释
示例
:<<EOF
第一行注释
第二行注释
第三行注释
EOF
其中EOF可以换成其它任意字符串。例如:
:<<abc
第一行注释
第二行注释
第三行注释
abc
:<<!
第一行注释
第二行注释
第三行注释
!
🍔shell变量
⭐定义变量
定义变量,不需要添加$
符号
定义变量时,等号两边不能有空格
name1='fufu' # 单引号定义字符串
name2="fufu" # 双引号定义字符串
name3=fufu # 也可以不加引号,同样表示字符串
⭐使用变量
使用变量,需要加上$
符号,或者${ }
符号。花括号是可选的,主要为了帮助解释器识别变量边界。
name=fufu
echo $name # 输出fufu
echo ${name} # 输出fufu
echo ${name}rice # 输出fufurice
⭐只读变量
使用readonly
或者declare
可以将变量变为只读
name=fufu
readonly name
declare -r name # 两种写法均可
name=abc # 会报错,因为此时name只读
⭐删除变量
使用unset
可以删除变量
name=fufu
unset name
echo $name # 输出空行
被声明为只读的变量无法被unset删除
⭐自定义变量(局部变量)
子进程不能访问的变量
⭐环境变量(全局变量)
子进程可以访问的变量
🎈把自定义变量改为环境变量
name=fufu #定义变量
export name #第一种方法
declare -x name #第二种方法
🎈把环境变量改为自定义变量
export name=fufu #定义环境变量
declare +x name #改为自定义变量
🍔默认变量
在执行 shell 脚本时,可以向脚本传递参数。
$1
是第一个参数,$2
是第二个参数,以此类推。特殊的,$0
是文件名(包含路径)。例如:
$0
是文件名(包含路径),其实就是我们输入的第一段,输入绝对路径就显示绝对路径,输入相对路径就显示相对路径
🍔字符串
字符串可以用单引号,也可以用双引号,也可以不用引号。
🎁单引号和双引号的区别
1.单引号中的内容会原样输出,不会执行,不会取变量
2.双引号中的内容可以执行,可以取变量
⭐其他参数相关变量
name=fufu #不用引号
echo 'hello, $name \"hh\"' # 单引号字符串,输出 hello, $name \"hh\"
echo "hello, $name \"hh\"" # 双引号字符串,输出 hello, fufu "hh"
⭐获取字符串长度
name="fufu"
echo ${#name} #输出4
获取长度时,一定要带上#
⭐提取字串
name="fufu"
echo ${name:0:2} # 提取从0开始的2个字符 (与python的切片不同)
🍔数组
数组下标从0开始
⭐定义
数组用小括号表示,元素之间用空格隔开
array=(1 abc "def" fufu)
也可以直接定义数组中某个元素的值
array[0]=1
array[1]=abc
array[2]="def"
array[3]=fufu
⭐读取数组中某个元素的值
🎈格式
${array[index]}
⭐读取整个数组
🎈格式
${array[@]} # 第一种写法
${array[*]} # 第二种写法
⭐读取数组的长度
🎈格式
${#array[@]} # 第一种写法
${#array[*]} # 第二种写法
这个和上面一种的区别就是array前面有没有#
🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰