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 语句
  1. if 单分支语句
    第一种语法:
if <条件表达式>
    then
     命令
fi

第二种语法

if <条件表达式>;then
        命令
fi
  1. 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
  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值