bash 面試題

1、設計一個shell腳本,在/userdata目錄下建立10個目錄,即user1~user50,并設置每個目錄的權限,其中其他用戶的權限為:讀;文件所有者的權限為:讀、寫、執行;文件所有者所在組的權限為:讀、執行

[root@node1 script]# cat mkuserdata.sh
#!/bin/bash
# author jin.ren
# date 20170412
# version 3.0
# can mkdir /usrdata userfile
if [ -d /usrdata ]; then
   for i in {1..10};do
mkdir /userdata/user$i
echo "mkdir user$i"
       chmod 754 /userdata/user$i
   done
else
   for b in {1..10};do
mkdir -p /userdata/user$b
       chmod 754 /userdata/user$b
echo "mkdir user$b"
   done
fi

2、用shell編程,判斷一文件是不是塊設備文件,如果是則將其拷貝到/dev目錄下

[root@node1 script]# cat checkblock.sh
#!/bin/bash
# Author jin.ren
# version 3.0
# date 20170412
directory=/dev
read -p "input the files absolute path " file1
for file in $file1
   do
   if [ -b $file ]
then
cp  -a $file $directory/
echo  "cp block file $file is backup in $directory"
   fi
done
[root@node1 script]# checkblock.sh
input the files absolute path /root/sr0 /root/sda5 /root/bbb
cp block file /root/sr0 is backup in /dev
cp block file /root/sda5 is backup in /dev

3、用shell腳本,批量建立用戶user1-user20的用戶和組class1并為用戶統一創建密碼為www.magedu.com,并指定屬組為class1

[root@node1 script]# cat useradd.sh
#!/bin/bash
#author jin.ren
#version 3.0
#date 20170412
groupadd class1
for i in {1..20}
   do useradd user$i  && echo "www.magedu.com" | passwd --stdin root &> /dev/null
      echo "add user user$i finished ... "
      usermod -g class1 user$i
      echo "user user$i add group class1"
done

4、編寫shell程序,實現自動刪除20個賬號。賬號名為user1至user20,用while語法實現

[root@node1 script]# cat userdel.sh
#!/bin/bash
# Author jin.ren
# Version 3.0
# date 20170412
a=1
while [ $a -le 20 ]
   do
userdel -r user$a
       a=$[$a+1]
done

5、寫一個shell,循環打印1-80的隨機數10次

[root@node1 script]# cat random.sh
#!/bin/bash
# Author jin.ren
# Version 3.0
# Date 20170412

for i in {1..10}; do
echo $[RANDOM%81]
done

6、用find命令查找/data/backup 文件下面創建時間為7天前的,后綴為.html的文件刪除

[root@node1 script]# touch -m -t "201612051232.22" /data/backup/adfadf.html
[root@node1 script]# ll /data/backup/adfadf.html
-rw-r--r-- 1 root root 0 Dec  5 12:32 /data/backup/adfadf.py
[root@node1 script]# find /data/backup/ -type f -mtime +7 -name "*html" | xargs rm
[root@node1 script]# ls /data/backup/adfadf.html
ls: cannot access /data/backup/adfadf.py: No such file or directory

7、新建一個html.sh腳本,可以建立以8位隨機字母開頭,且后綴名為.html的文件,可以與用戶交互接收參數,參數為多少時,可以新建多個這樣的隨機數文件。要求隨機字母必需為大字母。

[root@node1 test]# cat html.sh
#!/bin/bash
# Author jin.ren
# Version 3.0
# Date 20170421
read -p "Please input the create the html number: " num
[ -z $num ] && num=$num
for I in `seq $num`
   do random=` cat /dev/urandom | tr -dc [:alpha:] | head -c${1-8}`
      touch $random\.html
      echo "create $random\.html"
      unset random
done
[root@node1 test]# sh html.sh
Please input the create the html number: 5
create exCoThER\.html
create BMgCylNn\.html
create VKlpRWyy\.html
create JNvdHWjM\.html
create NFpfpinc\.html
[root@node1 test]# ls
BMgCylNn.html  exCoThER.html  html.sh  JNvdHWjM.html  NFpfpinc.html  VKlpRWyy.html

8、寫一個腳本判斷今天是星期幾,并實現七天中每天完成不一樣的任務,假如今天是周四,
輸出今天是周四,而后執行一條 tty命令

[root@node1 script]# cat weekday.sh
#!/bin/bash
# Author jin.ren
# Version 3.0
# Date 20170412
date1="Monday"
date2="Tuesday"
date3="Wednesday"
date4="Thursday"
date5="Friday"
date6="Saturday"
date7="Sunday"
for week in `date +%A`;do
if [ $week == $date1 ];then
  echo "This is $week" && ls -l
elif [ $week == $date2 ];then
  echo "This is $week" && pwd
elif [ $week == $date3 ];then
  echo "This is $week" && cal
elif [ $week == $date4 ];then
  echo "This is $week" && tty
elif [ $week == $date5 ]; then
  echo "This is $week" && id
elif [ $week == $date6 ]; then
  echo "This is $week" && du -sh
else  
  echo "This is $week " &&  history -r
fi
done
[root@node1 script]# weekday.sh
This is Wednesday
    April 2017    
Su Mo Tu We Th Fr Sa
                  1
2  3  4  5  6  7  8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

9、生成指定個隨機數,并計算出指定個隨機數中的最大數,與最小數

[root@node1 test]# cat opertion.sh
#!/bin/bash
declare -i MAX=0
declare -i MIN=0
for i in `seq $1`;do
MYRAND=$RANDOM
[ $i  -eq 1 ] && MIN=$MYRAND
if [ $i -le $1 ] ; then
echo -ne "n$MYRAND  \t"
else
echo "$MYRAND"
fi
[ $MYRAND -gt $MAX ] && MAX=$MYRAND
[ $MYRAND -lt $MIN ] && MIN=$MYRAND
done
echo  "this number MAX=$MAX MIN=$MIN"
[root@node1 test]# sh opertion.sh 10
n30202  n400    n11091  n30524  n5947   n12782  n9286n6977     n25802   n5945   this number MAX=30524 MIN=400

10、用until命令來實現,統計文件行數的腳本,并且實現與用戶交互,直到用戶輸入quit為止,退出程序,否則一直提示用戶輸入一個文件。

[root@node1 script]# cat wcfile.sh
#!/bin/bash
# Author: jin.ren
# Version: 3.0
# Date 20170412
read -p "please input a file way name or quit : " file
until [ $file == 'quit' ] ; do
    line=`cat $file | wc -l `
    echo "The file have a $line line! "

 read -p "please input a file way name: " file
 done

11、如何將/root/script添加至環境變量中去

[root@node1 ~]# mkdir script
[root@node1 ~]# cd script/
[root@node1 script]# cat <<EOF >> /script/test.sh
> #!/bin/bash
> echo "test PATH"
> EOF
[root@node1 script]# chmod +x test.sh
[root@node1 script]# test 這個時候用補全是補不出test.sh這個可執行腳本來的
test        testgdbm    testlibraw  testparm    testrb  
[root@node1 script]# cat <<EOF >> /etc/profile.d/script.sh
> export PATH=/root/script:$PATH
> EOF
[root@node1 script]# chmod +x /etc/profile.d/script.sh
[root@node1 script]# . /etc/profile.d/script.sh
[root@node1 ~]# test.sh
test PATH  當把/root/script添加至環境變量中時,test.sh 是可以直接執行了

12、設計一個shell腳本,在/data目錄下創建10個目錄,即user1~user10,并設置每個目錄的權限,其中文件所有者的權限為可讀可寫可執行,文件屬組的權限為可讀可執行,其他用戶的權限為可讀。

#!/bin/bash
#
for i in {1..10};do
echo "$i"
mkdir -pv -m 754 "/data/user$i"
done

13、設計一個shell腳本,接收一個整數N作為參數,實現批量創建用戶,用戶名格式為user1到userN,一共N個用戶。這些用戶的基本組統一為class23。并刪除之前創建的用戶。

#!/bin/bash
#

var_cnum=$1
var_dnum=$1
var_group=$2

groupadd $var_group

while [ $var_cnum -gt 0 ];do
# echo $var_a
useradd user$var_cnum -g $var_group &> /dev/null
let var_cnum-=1
done
#delete users
cat /etc/passwd | grep "^user"

for i in $( seq 1 $var_dnum );do

userdel -rf user$i
done

14、設計一個shell腳本,該腳本可以接收一個1到5的整數作為參數,功能為創建文件,文件的名稱格式為8個隨機的大小英文字母,創建文件的個數等于輸入的整數參數值。

#!/bin/bash

var_fnum=$1
var_content="A B C D E F G H I G K L M N O P Q R S T U V W X Y Z"
for i in $( seq 1 $var_fnum );do

var_n1=0
var_n2=0
var_n3=0
var_n4=0
var_n5=0
var_n6=0
var_n7=0
var_n8=0

for i in {1..8};do
var_index=$[ $RANDOM % 26 + 1 ]
var_alpha=`echo $var_content | cut -d " " -f $var_index`

if [ $i -eq 1 ];then
var_n1=$var_alpha
fi

if [ $i -eq 2 ];then
var_n2=$var_alpha
elif [ $i -eq 3 ];then
var_n3=$var_alpha
elif [ $i -eq 4 ];then
var_n4=$var_alpha
elif [ $i -eq 5 ];then
var_n5=$var_alpha
elif [ $i -eq 6 ];then
var_n6=$var_alpha
elif [ $i -eq 7 ];then
var_n7=$var_alpha
else
var_n8=$var_alpha
fi
done

echo "<h1>www.Magedu.com</h1>" > $var_n1$var_n2$var_n3$var_n4$var_n5$var_n6$var_n7$var_n8\.html

done

15、編寫一個猜數字的游戲,要猜的數字為1到100百的整數。用戶執行程序后根據提示輸入一個數字,當輸入的數字等于要猜的數字時,提示猜數字成功,程序結束退出。若輸入的數字不等于要猜的數字,提示輸入的數字大于或者小于要猜的數字,然后提示用戶繼續輸入一個數字繼續猜,直到用戶猜中結果,程序猜結束退出。

#!/bin/bash
var_Matrix=$[ $RANDOM % 100 + 1 ]
echo $var_Matrix

var_num=0

while [ ! $var_Matrix -eq $var_num ];do
read -p "please input a number to guess the Matrix: " var_num
if [ $var_Matrix -gt $var_num ];then
echo "Your number is so smaller! try again!"
else
echo "Your number is so bigger! try again!"
fi
done

echo "you win the game, The Matrix is $var_Matrix"

原創文章,作者:renjin,如若轉載,請注明出處:http://www.www58058.com/79317

(0)
renjinrenjin
上一篇 2015-07-03
下一篇 2015-07-04

相關推薦

  • 第一周:Linux基礎之系統入門知識(一)

    一、計算機的組成及功能 現代計算機的基本結構是由匈牙利-美國科學家馮· 諾依曼于1946年提出的。迄今為止所有進入實用的電子計算機  都是按馮· 諾依曼提出的結構體系和工作原理設計制造的故又統稱為“馮·諾依曼型計算機"。 根據馮.諾依曼原理:計算機由運算器、控制器、存儲器、輸入設備、輸出設備所組成 運算器: 進行算術與邏輯運算 控制器:&…

    Linux干貨 2016-09-18
  • Linux 第十天: Linux文件查找和壓縮

      Linux 第十天: Linux文件查找和壓縮                     使用Linux的時候, 經常需要查找文件, 在Linux中, 有很多方法可以做到這一點.…

    Linux干貨 2016-08-18
  • Homework Week-10 CentOS啟動相關及bash腳本編程

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;   (1) 為硬盤新建兩個主分區;并為其安裝grub;   (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;   (3) 為rootfs提供…

    Linux干貨 2016-10-24
  •   在服務器托管的過程中出現故障是不能完全避免的問題,可能是服務器硬盤出現硬件故障或者是防火墻遭到攻擊。那么服務器托管出現故障怎么辦?

      在服務器托管的過程中出現故障是不能完全避免的問題,可能是服務器硬盤出現硬件故障或者是防火墻遭到攻擊。那么服務器托管出現故障怎么辦?   服務器硬盤出現硬件故障時,大家應注意以下幾點:   1、硬盤出現異聲,此時磁頭已不正常尋址,為防止打傷盤體,需立即斷電不可拆解硬盤,需交有超凈間的專業公司拆開檢查。   2、BIOS不認盤,找不到硬盤,先請計算機工程師仔…

    Linux干貨 2016-04-05
  • 文件通配符是啥?

    文件通配符     包含 ‘?’, ‘*’ 或 ‘[‘ 字符的字符串稱為通配符模板(wildcard  pattern).形成路徑名(globbing)指一種操作,把通配符模板展開為匹配該串的路徑名.匹配定義為:   …

    Linux干貨 2017-04-23
  • Linux LVM介紹及管理

    什么是LVM? LVM是邏輯盤卷管理(LogicalVolumeManager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,用來提高磁盤分區管理的靈活性。系統管理員可以通過LVM輕松的管理磁盤分區,如:將若干個磁盤分區或物理磁盤連接為一個整塊的卷組 (volumegroup),形成一個存儲池。管理員可以…

    Linux干貨 2016-08-30
欧美性久久久久