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””来显示
扫描二维码关注公众号,回复:
697509 查看本文章
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