几道不错的SHELL题目,收藏下
1.用Shell编程,判断一文件是不是块或字符设备文件,如果是将其拷贝到 /dev 目录下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash #1.sh #判断一文件是不是字符或块设备文件,如果是将其拷贝到 /dev 目录下 #file executable: chmod 755 1.sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH echo -e "The program will Judge a file is or not a device file.\n\n" read -p "Input a filename : " filename if [ -b "$filename" -o -c "$filename" ] then echo "$filename is a device file" && cp $filename /dev/ & else echo "$filename is not a device file" && exit 1 fi |
----------------------------------------------------
2. 设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash #2.sh #设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。 #file executable: chmod 755 2.sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH groupadd class1 for i in {9901..9930} do xx=`echo $i | sed 's/99//g'` useradd -g class1 std$xx echo std$xx | passwd std$xx --stdin echo -e "user std$xx password is std$xx" >> /root/newuser.txt done |
-------------------------------------------
3.编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash #4.sh #编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。 #file executable: chmod 755 3.sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH i=1 while [ i -le 50 ] do let i++ userdel -r stud$i done |
---------------------------------------------
4.某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午4 :50删除/abc目录下的全部子目录和全部文件;
(2)从早8:00~下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;
(3)每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;
(4)在下午5:55将IDE接口的CD-ROM卸载(假设:CD-ROM的设备名为hdc);
(5)在早晨8:00前开机后启动。
vim /etc/crontab 在里面增加下面内容:
1 2 3 4 | 50 16 * * * root rm -rf /abc/* 2>&1 & 00 8-18 * * * root cat /xyz/x1|awk '{print $1}' >> /backup/bak01.txt 2>&1 & 50 17 * * 1 root cd /data;tar -zcvf backup.tar.gz * 2>&1 & 55 17 * * * root umount /hdc 2>&1 & |
5)在早晨8:00前开机后启动 –> 这个我不是很明白它的意思,不知道是不是8点前开机就启动上面的设定,8点后才开机就不用启动的意思。
姑且用下面这个命令吧
chkconfig –level 2345 crond on
---------------------------------------------
5.设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名
为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下。
vim /usr/bin/fileback.sh
1 2 3 4 5 6 7 8 9 | #!/bin/bash #fileback.sh #file executable: chmod 755 fileback.sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH filename=`date +%y%m%d`_etc.tar.gz cd /etc/ tar -zcvf $filename * mv $filename /root/bak/ |
——————————————————
vim /etc/crontab 加入
* * 1 * * root ./fileback.sh &
------------------------------------------------
6.有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?
可以用 contab -e 来做,和上面一题差不多。
7.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其
中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash #7.sh #file executable: chmod 755 7.sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH for ((i=1;i<=50;i++)) do mkdir -p /usrdata/user$i cd /usrdata chmod 754 user$i done |
原文地址:http://hi.baidu.com/whq4557/blog/item/455d54fc2fe393f5fc037fe2.html
Tags: shell
终于找到了在Windows7中安装Zend Studio 5.5的方法,收藏下
Zend studio5.5在Win7、Win2008Server等系统下安装的时候会出现很奇怪的问题,例如,按钮、单选框和复选框等都无法显示,给正确配置安装带来困难。即使全部点下一步并安装完成,打开程序时弹一个框就不见了,无法正常启动。
Zend studio5.5在Win7、Win2008Server等系统下安装的时候会出现很奇怪的问题,例如,按钮、单选框和复选框等都无法显示,给正确配置安装带来困难。即使全部点下一步并安装完成,打开程序时弹一个框就不见了,无法正常启动。
经过参考网上的一些解决办法,整理如下:
1.下载最新的JRE(Java Runtime Environment),可上java官网下载,我安装的是JRE6。
2.使用WINRAR解压 Zend Studio 5.5.1.exe。该文件双击时会直接安装,而不显示解压的文件夹。因此,需要安装winrar后,在右键弹出菜单中选择解压。
3.进入解压后的文件夹 Zend Studio 5.5.1\Windows(下面简称A文件夹),将resource目录下的jre文件夹重命名为jre.back(或其他名称都可).
4.复制JRE安装目录(C:\Program Files\Java\jre6)中的jre6到第03步中的文件夹A,并将文件夹jre6重命名为jre。
5.执行安装A文件夹下的 Zend Studio 5.5.1.exe
6.安装完成后将A文件夹下resource目录中的jre.back文件夹复制到Zend Studio的安装目录中。
7.重命名安装目录中的 jre 文件夹为 jre6
8.重命名安装目录中的 jre.back 文件夹为 jre
9.在ZendStudio图标上点击右键/属性/兼容性 设置兼容模式为 Vista
10.启动Zend Studio
原文:http://www.cnblogs.com/jyginger/archive/2010/07/23/1783966.html
数组相关知识点:
指针数组:是指所有元素都是指针的数组, 即“存储指针的数组”,如 int *p[10]
数组指针:是指指向一个数组的指针,即“指向数组的指针”,如 int (*p)[10]
使用示例:
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 | #include <stdlib.h> #include <stdio.h> int main(int argc, char **argv) { char array[5] = {'a', 'b', 'c', 'd', 'e'}; //定义一个指针数组 char *point_array[5]; //定义一个数组指针,使用数组array的首地址初始化 char (*array_point)[5] = &array; int i; for(i = 0; i < 5; i++) { //使用数组a的第i个元素的地址给指针数组第i个元素赋值 point_array[i] = &array[i]; //输出原数组的第i个元素的值 printf("a[%d] = %c\n", i, array[i]); //输出指针数组第i个元素的值 printf("*point_array[%d] = %c\n", i, *point_array[i]); //输出数组指针所指向数组的第i个元素的值 printf("*array_point[%d] = %c\n\n", i, (*array_point)[i]); } return 0; } |
1.memmove
函数原型:void *memmove(void *dest, const void *source, size_t count)
返回值说明:返回指向dest的void *指针
参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数
函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。
2.memcpy
函数原型:void *memcpy(void *dest, const void *source, size_t count);
返回值说明:返回指向dest的void *指针
函数说明:memcpy功能和memmove相同,但是memcpy中dest和source中的区域不能重叠,否则会出现未知结果。
3.两者区别
函数memcpy() 从source 指向的区域向dest指向的区域复制count个字符,如果两数组重叠,不定义该函数的行为。
而memmove(),如果两函数重叠,赋值仍正确进行。
memcpy函数假设要复制的内存区域不存在重叠,如果你能确保你进行复制操作的的内存区域没有任何重叠,可以直接用memcpy;
如果你不能保证是否有重叠,为了确保复制的正确性,你必须用memmove。
memcpy的效率会比memmove高一些,如果还不明白的话可以看一些两者的实现:
本地安装
sudo apt-get install manpages-dev
在线查阅地址:
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <stdio.h> #include <stdlib.h> #include <string.h> static char *do_trim(char *input, char *what, int mod); char *trim(char *c, char *what) { return do_trim(c, what, 3); } char *ltrim(char *c, char *what) { return do_trim(c, what, 1); } char *rtrim(char *c, char *what) { return do_trim(c, what, 2); } static char *do_trim(char *input, char *what, int mod) { char mask[256]; int input_len, what_len; int i; int trimmed = 0; char *retval; if(!what) { what = " \n\r\t\v\0"; } memset(mask, 0, 256); input_len = strlen(input); what_len = strlen(what); for(i = 0; i < what_len; i++) { mask[what[i]] = 1; } if(mod & 1) { for(i = 0; i < input_len; i++) { if(mask[input[i]]) { trimmed++; } else { break; } } input_len -= trimmed; input += trimmed; } if(mod & 2) { for(i = input_len-1; i >= 0; i--) { if(mask[input[i]]) { input_len--; } else { break; } } } if((retval = (char *)malloc(input_len+1)) == NULL) { return NULL; } retval[input_len] = '\0'; memcpy(retval, input, input_len); return retval; } |
http://www.gnu.org/software/autoconf/manual/autoconf.html
http://www.gnu.org/software/automake/manual/automake.html
http://www.lrde.epita.fr/~adl/autotools.html
http://en.wikipedia.org/wiki/GNU_build_system
http://blog.csdn.net/romandion/archive/2007/07/13/1688234.aspx
http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html
http://www.shangshuwu.cn/index.php/Linux应用程序编译方法
Linux中C语言开发autotools中在configure.in(ac)中添加mysql相关开发动态库文件链接处理
在编译时可通过使用–with-mysql=PATH指定mysql的安装路径
参考自memcached中libevent处理
用法及返回结果如下:
lvyaozu@lvyaozu-desktop:~/shell$ ./requesturl.sh -n20 http://www.baidu.com
Request url: http://www.baidu.com
Request number: 20
Request Failed: 0
——Average Value——
time_connect: 0.1614
time_total: 0.1693
time_namelookup: 0.0088
————————-
请求参数:
-n 指定发送多少次请求,默认为10
返回结果为 curl -w 选项返回值,以下摘自curl官方文档:
http://curl.haxx.se/docs/manpage.html
time_connect The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.
time_total The total time, in seconds, that the full operation lasted. The time will be displayed with millisecond resolution.
time_namelookup The time, in seconds, it took from the start until the name resolving was completed.
代码:
记这里,下周一上班完善下可以直接用了,嘿嘿
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 | #!/bin/bash year=`date +%Y` month=`date +%m` day=`date +%d` log_dir=/home/lvyaozu/logs count_dir=/home/lvyaozu/logs filename=$year"_"$month"_"$day fileext=".log" log_file=$log_dir"/"$filename$fileext echo $log_file; if [ ! -f $log_file ] then echo "log file: "$log_file" does not exist!"; exit 1; fi if [ ! -d $count_dir ] then echo "count directory :"$count_dir"does not exist!"; exit 2; fi sort_file_name=$count_dir"/"$filename"_sort"$fileext; top_file_name=$count_dir"/"$filename"_top"$fileext; echo $sort_file_name; echo $top_file_name; awk 'BEGIN{OFS=":"}{if($1) a[$1]++}END{for(i in a)print a[i],i}' $log_file | sort -r -t":" -k1 -n > $sort_file_name awk -F: '{print substr($0,length($1)+2)}' $sort_file_name > $top_file_name |
Tags: shell