每天一道编程题(2)

1. 在/home目录中创建一百个目录,目录名称依次为a1……a100.

 

#!/usr/bin/sh
cd /home
for item in `seq 1 100`
do
        mkdir a$item
done

   其中,seq用于产生从一个数到另一个数的序列。需注意for循环用法,是将in后序列中的元素依次取出。这点和python是一致的。反引号表示命令的执行,也可以表示为$(seq 1 10)。

    查到一个简单的方式:

mkdir /home/a{1...100}

2. 编写一个脚本,自动将用户主目录下所有小于5KB的文件全打包成XX.tar.gz中.(提示:用ls,grep,find等命令,文件一般指普通文件)

 

find . -size -5k -type f -exec tar -czPf xx.tar.gz {} +

  其中find -exec command {} +的用法如下: http://blog.csdn.net/pushme_pli/article/details/8897876,其中exec与xargs用法相似,不过{}不能用到xargs中,所以第二种方式如下:

 

find . -type f -size -5k | xargs tar -czvf xx.tar.gz 

 

 

3. 写一个程序,可以将/et/passwd的第一列取出,而且每一列都以一行字符串“the 1 account is “root””来显示

 

awk -F: '{ printf("The %s account is %s\n",NR,$1) }' /etc/passwd 

 4. 编写一个程序,他的作用是先查看一下/root/test/logical这个名称是否存在,若不存在,则创建一个文件。使用touch来创建,创建完成后离开;如果存在的话,判断该名称是否为文件,若为文件则将之删除后新建一个目录。文件名为loglical,之后离开;如果存在的话,而且该名称为目录,则删除此目录。

#!/usr/bin/sh
Filename=/home/test/logical
if [ -e $Filename ] ; then
        if [ -f $Filename ] ; then
             rm -rf $Filename
             mkdir -p $Filename
        elif [ -d $Filename ] ; then
                rm -rf $Filename
        else
                echo "Finish"
        fi
else
      mkdir -p ${Filename%/*} && touch $Filename
        echo "Finish"
fi

    看别人写的:

 

#!/bin/bash
file=/root/test/logical
[ -d $file ] && rm -rf $file && exit 1 
[ -f $file ] && rm -f $file && mkdir loglical && exit 2
touch $file && exit 3

    此时,有${}的用法,${}一般是用作变量替换的。举例如下:

file=/dir1/dir2/dir3/my.file.txt

${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt
${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt
${file##*.}:拿掉最后一个 . 及其左边的字符串:txt
${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值)
${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)

 

 引自http://bbs.chinaunix.net/thread-4134568-2-1.html

 

 

你可能感兴趣的:(每天一道编程题(2))