Shell脚本进阶

#### 1. 题目要求

用shell打印下面这句话中字母数小于6的单词。
Bash also interprets a number of multi-character options.

#### 核心要点

- for循环遍历所有单词
- wc -L获取字符串长度

#! /bin/bash
str="Bash also interprets a number of multi-character options."
for i in $str
do
    n=`echo "$i" | wc -L`
    if(($n<6))
    then

        echo $n $i
    fi
done

解析:使用for循环将这句话中每个单词依次循环赋值给$i,首先,第一次循环将第一个词赋值给$i,然后输出$i,并使用管道符|将输出结果给后面的wc -L命令(统计字符数),将统计结果赋值给变量$n,``反引号的作用就是将最后的执行结果反馈。

#### 2. 题目要求

请仔细查看如下几个数字的规律,并使用shell脚本输出后面的十个数字。

10 31 53 77  105 141 …….

#### 核心要点

- 计算两个数值之间的差值

#!/bin/bash
x=10
y=21
for i in `seq 0 15`
#for i in {1..15}
do 
    echo $x
    x=$[$x+$y]
    z=$[2**$i]
    y=$[$y+$z]
done

 解析:`s

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个类似tree命令的shell脚本,满足题目的要求: ```bash #!/bin/bash # 定义一个递归函数,输出目录结构 function tree() { local dir=${1:-.} local prefix=${2:-""} local link="" local file="" local dir_list=() local link_list=() local file_list=() # 遍历当前目录下的所有文件和目录 for item in $(ls -1 "$dir"); do # 如果是目录,则输出目录名,并递归调用tree函数 if [ -d "$dir/$item" ]; then echo "${prefix}├── $item/" dir_list+=("$item") # 如果是链接,则输出链接名,并将链接目标作为新的dir调用tree函数 elif [ -L "$dir/$item" ]; then link=$(readlink "$dir/$item") echo "${prefix}├── $item -> $link" link_list+=("$item") # 如果是文件,则输出文件名 else echo "${prefix}├── $item" file_list+=("$item") fi done # 对于每个目录,递归调用tree函数 for dir_item in "${dir_list[@]}"; do tree "$dir/$dir_item" "${prefix}│ " done # 输出链接和文件的数量 if [ ${#link_list[@]} -gt 0 ]; then echo "${prefix}├── ${#link_list[@]} links" fi if [ ${#file_list[@]} -gt 0 ]; then echo "${prefix}└── ${#file_list[@]} files" fi } # 解析命令行参数 show_files=1 show_long=0 while getopts "fl" opt; do case $opt in f) show_files=0 ;; l) show_long=1 ;; \?) echo "Invalid option: -$OPTARG" >&2 echo "Usage: $(basename $0) [-f] [-l] [dir]" >&2 exit 1 ;; esac done shift $((OPTIND-1)) # 获取要显示的目录 dir=${1:-.} cd "$dir" || exit 1 # 输出目录结构 echo "$dir" if [ $show_files -eq 0 ]; then tree | grep --color=never "/$" else tree fi if [ $show_long -eq 1 ]; then echo "------------------------" ls -l fi ``` 该脚本实现了以下功能: 1. 可以显示指定目录下的目录结构。 2. 通过使用参数 `-f` 可以只显示目录,不显示文件。 3. 可以处理链接,输出链接名和链接目标。 4. 通过使用参数 `-l` 可以显示部分长信息。 使用示例: ```bash $ ./tree.sh -f /usr/local /usr/local ├── bin/ ├── etc/ ├── games/ ├── include/ ├── lib/ ├── man/ ├── sbin/ ├── share/ ├── src/ ├── var/ └── www/ $ ./tree.sh -l /usr/local /usr/local ├── bin/ ├── etc/ ├── games/ ├── include/ ├── lib/ ├── man/ ├── sbin/ ├── share/ ├── src/ └── var/ ------------------------ total 0 lrwxr-xr-x 1 root root 9 Nov 6 2019 bin -> ../sbin drwxr-xr-x 3 root root 3 Nov 6 2019 etc/ drwxr-xr-x 2 root root 2 Nov 6 2019 games/ drwxr-xr-x 2 root root 2 Nov 6 2019 include/ drwxr-xr-x 10 root root 9 Nov 6 2019 lib/ drwxr-xr-x 5 root root 5 Nov 6 2019 man/ lrwxr-xr-x 1 root root 9 Nov 6 2019 sbin -> ../bin drwxr-xr-x 5 root root 5 Nov 6 2019 share/ drwxr-xr-x 4 root root 4 Nov 6 2019 src/ drwxr-xr-x 2 root root 2 Nov 6 2019 var/ ``` 在使用时,可以通过修改定义函数 `tree` 的方式来实现更多的功能。例如,可以在输出目录结构时,对目录进行排序;或者在输出长信息时,使用不同的选项来显示更多的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值