shell基础语法
一、shell基础语法
1 注释
注释在脚本中是非常重要的,它们帮助代码的阅读和维护。单行注释以 #
开头,多行注释可以通过连续多个 #
实现,但更优的方式是养成良好的注释习惯。
#!/bin/bash
# 这是一个单行注释
: '
这是多行注释的方法之一
第二行注释
第三行注释
'
<<EOF
这是另一种多行注释的方法
第二行注释
第三行注释
EOF
echo "Hello, World!" # 你也可以在命令行之后添加注释
2 变量
变量可以分为本地变量、环境变量、位置参数等。
- 定义变量
a=‘big’ # 单引号定义字符串
b=“big” # 双引号定义字符串
c=big # 也可以不加引号,同样表示字符串
单引号与双引号的区别:
单引号中的内容会原样输出,不会执行、不会取变量;
双引号中的内容可以执行、可以取变量;
- 全局变量
#!/bin/bash
declare -a name=("a" "b")
- 使用变量
- 使用变量时用
$
或者${}
主要为了帮助解释器识别变量边界
name=bigdavid
echo $name
echo ${name}
echo ${name}big #输出的是bigdavidbig
- 局部变量 仅在当前 shell 会话中有效。
#!/bin/bash local_var="I am local" export global_var="I am global" # 使用 export 声明全局变量
- 特殊变量
Shell中提供 提供了一些预定义变量: $0
:脚本的文件名$n
:传递给脚本的第 n 个参数(n是一个自然数)$#
:传递给脚本的参数个数$@
:传递给脚本的所有参数(作为单个字符串)$*
:传递给脚本的所有参数(分开的字符串)$?
:上一条命令的退出状态$$
:当前脚本的进程ID
特殊变量 | 作用说明 |
---|---|
$0 | 表示执行脚本名称 |
$n | 表示脚本的第n个参数值,注意${10} |
实例:
#!/bin/bash
echo "Script name: $0"
echo "First parameter: $1"
echo "Number of parameters: $#"
echo "All parameters: $@"
echo "Last command's exit status: $?"
echo "Script's PID: $$"
3 read输入、echo输出
1 read
参数:
-p: 后面可以接提示信息
-t : 后面跟秒数,定义输入字符的等待时间,超过等待时间会自动忽略该命令
#读入name的值,等待时间3秒
read -p "Please input your name: " -t 3 name #
echo $name
Please input your name: bigdavid # 标准输入
echo $name # 输出name的值
zdc #标准输出
2 echo
1 显示普通字符
echo ‘zdc’
2 显示变量
name=zdc
echo “$name”
3 显示换行
echo –e “zdc\n”
4显示的结果定向至文件
ech “ Hello world” >output.txt
常用:echo -e ‘y\n’ 用于自动输入enter,如下例子:
#自动格式化硬盘
#!/bin/bash
disks=("/dev/sda" "/dev/sdb" "/dev/sdc" "/dev/sdd" "/dev/sde" "/dev/sdf" "/dev/sdg" "/dev/sdh")
#1 格式化
for disk in "${disks[@]}"
do
这里自动回车,如果不加这句的话,命令运行时会在这里卡住
echo -e 'y\n' | mkfs.ext4 $disk
done
echo "all done"
4 控制语句
1. 条件语句if
在这里插入图片描述
- if 语句
- if 单分支语句
第一种语法:
if <条件表达式>
then
命令
fi
第二种语法
if <条件表达式>;then
命令
fi
- if双分支语句
elif
if <条件语句>
then
命令1
elif<条件表达式2>
命令2
else
命令3
fi
2- case 语句
#!/bin/bash
echo "请输入一个数字"
read num
case $num in
1)
echo "你输入了1"
;;
2)
echo "你输入了2"
;;
*)
echo "请输入1到3之间的数字"
;;
esac
2.条件(逻辑操作)
-
AND 操作 使用
-a
或&&
:#!/bin/bash if [ $number -gt 5 -a $number -lt 15 ]; then echo "Number is between 5 and 15" fi
-
OR 操作 使用
-o
或||
:#!/bin/bash if [ $number -lt 5 -o $number -gt 15 ]; then echo "Number is either less than 5 or greater than 15" fi
3.for 循环
1 语法
用法1
#!/bin/bash
for i in 1 2 3 4 5
do
echo "Welcome $i times"
done
用法2
#!/bin/bash
# 如果没有传递任何参数, 显示用法并退出
if [ "$#" -lt 1 ]; then
echo "Usage: $0 disk1 [disk2 ... diskN]"
exit 1
fi
# 遍历所有传递的参数
for disk in "$@"
do
echo "Information for /dev/$disk:"
#查询smart信息
smartctl -i /dev/"$disk"
# 查询后输出smart信息
smartctl -i /dev/"$disk" > "${disk}_smart.log"
echo "Output saved