linux期末复习五

94 阅读2分钟

设计一个shell脚本,求最小值

min=10000
for  i  in  12 5 18 58 -3 80 ;do      
       if (( i<min )) ;then       
                (( min=i ))       
       fi
done
echo " The smallest number is: $min"

设计一个shell脚本,求命令行上所有参数的整数和。

sum=0
while  (( $#  !=  0 )) ; do  
     (( sum = sum+$1 ))  
     shift
done
echo "the sum of arguments is $sum"

读取正整数m,计算各位和,例如123,各位和1+2+3=6

read m       
while (( m!=0 ));do       
      (( sum=sum+m%10 ))       
      (( m=m/10 ))          
done         
echo $sum

批量添加20个用户,名字格式为user01—user20, 口令为xxxuser$num

for i in {1..20};do      
           num=`printf  "%02d"  $i `                                                    uname="user$num"
           useradd $uname        
           echo xxx$uname | passwd --stdin  $uname        
done

从100开始找到50个含有7的素数输出,每五个一行。

function isprime(){    
    n=$1  
 if((n==2));then     
        return 0;   
  fi  
  local  i;   
  for ((i=2;i<=n/2;i++)); do    
        if (( n%i == 0 )); then           
             return 1;        
        fi     
  done   
  return 0;
}
i=100
count=0
while  ((count<=50)); do  
  isprime $i  
  r=$?  
  if (( r==0 )) && [[ "$i" =~ 7 ]] ;then   
  printf  "%4d"  $i   
  ((count++))    
  if (( count%5 ==0 ));then     
      echo ""    
   fi
fi
((i++))
done

编写shell程序,输出下列图形,行数由键盘输入:

image.png

read -p "请输入行数: " n
for ((i=1; i<=n; i++))
do
    for ((j=1; j<=i; j++))
    do
        printf "%-6s" "$j"
    done
    echo
done

编写shell程序,完成下列功能① 建立组两个组ai和bigdata。② 要创建立999个用户,用户名stxxx,形式为st001~st999,指定其家目录为dxxx。xxx为奇数的用户指定附加组ai,;xxx为偶数的用户指定其附加组bigdata。

groupadd ai 2>/dev/null
groupadd bigdata 2>/dev/null
for i in $(seq -w 1 999)
do
    username="st$i"
    dirname="/d$i"
    if (( $i % 2 == 1 )); then
        group="ai"
    else
        group="bigdata"
    fi
    mkdir -p "$dirname"
    useradd -d "$dirname" -G "$group" "$username"
    echo "$username:123456" | chpasswd
done

echo "999个用户已创建完成。"

编写shell程序,打印出从100开始52个各位和等于24的数,每五个输出一行

count=0    
num=100    
line=0      

while (( count < 52 ))
do
    sum=0
    temp=$num
    while (( temp > 0 ))
    do
        (( sum += temp % 10 ))
        (( temp /= 10 ))
    done

    if (( sum == 24 )); then
        printf "%5d" "$num"
        (( count++ ))
        (( line++ ))

        if (( line == 5 )); then
            echo
            line=0
        fi
    fi

    (( num++ ))
done

编写shell程序,将/root的文件依次处理,如果是目录则跳过。如果是文件,文件名中含有3,则将其复制到/tmp下;文件名中含有7,则将其移动到/tmp下;其他文件则输出文件名就可

for file in /root/*
do
    if [ -d "$file" ]; then
        continue
    fi

    filename=$(basename "$file")

    if [ -f "$file" ]; then
        if [[ "$filename" == *3* ]]; then
            cp "$file" /tmp/
        elif [[ "$filename" == *7* ]]; then
            mv "$file" /tmp/
        else
            echo "$filename"
        fi
    fi
done

打印出从100开始15个含有3或7的素数,每五个输出一行

is_prime() {
    local n=$1
    if (( n < 2 )); then
        return 1
    fi
    for (( i=2; i*i<=n; i++ )); do
        if (( n % i == 0 )); then
            return 1
        fi
    done
    return 0
}

count=0
line=0
num=100

while (( count < 15 )); do
    if is_prime "$num"; then
        if [[ "$num" == *3* || "$num" == *7* ]]; then
            printf "%5d" "$num"
            ((count++))
            ((line++))
            if (( line == 5 )); then
                echo
                line=0
            fi
        fi
    fi
    ((num++))
done