0905 shell脚本

本文深入探讨了Bash脚本的基础知识,包括解释器编辑器的使用、IO重定向、参数处理、变量引用、条件语句及循环控制。通过具体案例讲解了用户管理脚本、文件大小查找和文件行数统计的实现方法。

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

bash 是解释器 编辑器  #!/bin/bash   类似于 #!/usr/bin/python  指出解释器的位置 #!/bin/awk -f 解释awk语句可以

重定向 IO 

程序都有io  0 标准输入 1 正确输出 2 错误输出

ls / /hello 1>right.log 2>err.log   ls命令的正确输出 输出到right.log下 错误输出到err.log下  

ls / /hello &>log.log  正确错误全部输出到log.log下     ls / /hello 1>log.log 2>&1

 将用户控制台的输入赋值给a变量   read a  控制台输入字符串 echo $a 获取到控制台输入

read a 0<<<"hello"  将hello重定向到字符串     read a 0<<MYEOF 重新定向到多行文本

0<将标准输入重新定向到文本文件   cat 0</etc/passwd  

$# 参数个数 $@参数列表“a” “b” “c” "d"  $*参数列表"a b c d "

echo $1   echo ${11}   $表示指向

数组

    arr=(a b c)   echo ${arr[1]}  echo ${arr[*]}  echo ${arr[@]}

`` 反引号 提升反引号内的优先级 ""弱引用,会先算出""内的   ''单引号 强引用 直接输出

echo "\"a\""  

echo $? 判断上一步的退出状态 0是对 其他错

a&&b  a对的情况下执行b

a||b  a错的情况下执行b

算术表达式((a++))

案例 1 :

  • 添加用户      useradd  <username>
  • 用户密码同用户名    passwd  --stdin  <username>  0<<<"username"
  • 静默运行脚本
  • 避免捕获用户接口
  • 程序自定义输出

#!/bin/bash

if [ $# -ne 1 ] && echo "args wrong!" && exit 2               参数个数不是1个 参数错误 退出名字2 因为2退出的 标记作用

id $1 &>/dev/null && echo "user exists!" && exit 3         id 是否已经存在 输出信息到黑洞文件

useradd $1

passwd --stdin $1 0<<<$1 &>/dev/null                            获取重定向输入 

echo "user added"

案例 2 :

  • 用户给定路径
  • 输出文件大小最大的文件    du -a /etc | sort  -nr
  • 递归子目录

#!/bin/bash

oldIFS = $IFS                  修改分隔符 默认是空格 \t \n 将for循环能获得一行数据

IFS=$'\n'                                                      

for item in `du -a $1 |sort -nr `; do

   fileName = `echo $item |awk '{print $2}'`

   if  [  -f  $fileName  ]; then

      echo  $fileName

      flag=1

      break

     fi

done

IFS=$oldIFS    #用完后重置IFS变量的值。

 

案例3 

循环遍历文件每一行:流程控制语句  IFS

  • 定义一个计数器
  • 打印num正好是文件行数

#!/bin/bash

num=0

oldIFS = $IFS

IFS = $'\n'

for iten in `cat $1`;do                          遍历每一行

    echo $item

    ((num++))

done

echo "line number is :$num"

IFS=$oldIFS

 

方法二 通过read标准输入重定向

#!/bin/bash

num=0

while read line; do             read读取按行分割

echo $line             打印一行

((num++))              计数器+1行

done < $1              将文件重定向输入到 while里去

echo "line number is :$num"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值