一、脚本编写范例:
1.编写一个脚本。
1)、显示当前系统上第1块网卡eth0的IP地址,如果发生错误,则重定向至/dev/null
2)、显示/var/目录下的所有文件或子目录,但要把所有字母换成大写
3)、以一个命令显示当前系统上所有可用shell对应的可执行文件的文件内容类型,并让结果以全大写的方式显示;
#!/bin/bash
echo "The ip address is:"
ifconfig eth0 | grep "inet addr" | cut -d: -f2 | cut -d' ' -f1 2> /dev/null
echo "/var file is:"
ls /var | tr 'a-z' 'A-Z'
echo "SHELL is: "
file `cat /etc/shells | tr 'a-z' 'A-Z'`
2.写一个脚本:
添加10个用户user1到user10.但要求只有用户不存在的情况下才能添加:
第一种方法:
#!/bin/bash
for muser in {1..10}; do
useradd "user$muser" &> /dev/null || echo "yong hu yi cun zai" || echo "yong hu chuang jian successfully"
done
第二种方法
#!/bin/bash
for newuser in {1..10} ; do
! id user$newuser &> /dev/null && useradd user$newuser &> /dev/null && echo "user$newuser" | passwd --stdin
user$newuser &> /dev/null && echo "Add user user$newuser successfully"
done
3.写一个脚本:
通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线,在线,就显示“IP is up.” 不在线,就显示"ip is down."
#!/bin/bash
NET=192.168.0
for I in {151..254}; do
ping -c1 -W1 $NET.$I &> /dev/null && echo "$NET.$I is up." || echo "$NET.$I is down."
done
4.写一个脚本,测试172.16.0.0、16网络内的所有主机是否在线;
#!bin/bash
echo " lian xi ti di 5 ti"
declare -i n=0 m=0
host=172.16
for n in {0..254}; do
for m in {1..254}; do
ping -c1 -W1 $host.$n.$m &> /dev/null && echo "$host.$n.$m is up." || echo "$host.$n.$m is down."
done
done
5.写一个脚本:
(1)新建文件mysed.txt,含有如下行:
/etc/inittab
/etc/pam.d/sudo
/usr/share/doc/
/usr/local/
/etc/sysconfig/
/var/log/messages
(2)、取出如上文件中每一行文件名中不包含路径的文件名,
比如,/etc/inittab的文件名为inittab,/etc/sysconfig/的文件名为sysconfig;
(注意不能使用basename命令,要使用sed)
(3)、取出如上文件中每一行文件名中不包含文件名的路径,
比如,/etc/inittab的路径为/etc,/usr/share/doc的路径名为/usr/share;
#!/bin/bash
FILE=/tmp/mysed.txt
cat > $FILE <<EOF
/etc/inittab
/etc/pam.d/sudo
/usr/share/doc/
/usr/local/
/etc/sysconfig/
/var/log/messages
EOF
sed 's@.*/\([^/]\{1,\}\)/\{0,1\}@\1@g' $FILE
sed 's@\(.*\)/[^/]\{1,\}/\{0,1\}@\1@g' $FILE
6.写一个脚本,完成以下功能:
(1)、创建文件mycp.txt,包含如下内容:
cut
netstat
pwd
mke2fs
mkswap
blkid
gcc
man
eject
sshd
说明:这些文件位于/bin, /sbin, /usr/bin, /usr/sbin目录中,但具体哪个命令在哪个目录中,可以使用which命令查看到。
(2)、如果不存在,则创建空目录/tmp/mylinux,否则,先删除后再重新创建,并且在/tmp/mylinux中创建子目录bin, sbin, usr, usr/bin, usr/sbin
(3)、将cut文件复制至相应的/tmp/mylinux目录的某个子目录中去。比如,将/bin/cut复制到/tmp/mylinux/bin目录,把/sbin/mke2fs复制到/tmp/mylinux/sbin目录中;
#!/bin/bash
FILE=/tmp/mycp.txt
target="/tmp/mylinux"
cat > $FILE << EOF
cut
netstat
pwd
mke2fs
mkswap
blkid
gcc
man
eject
sshd
EOF
[ -e $target ] && rm -rf $target &> /dev/null
mkdir $target &> /dev/null
for command in `cat $FILE` ; do
cmd=`which $command | grep -v "^alias" | grep -o "/.*"`
cmdpath=`echo $cmd | sed 's@\(.*\)/[^/]\{1,\}/\{0,1\}@\1@g'`
[ -d $target/$cmdpath ] || mkdir -p $target/$cmdpath &> /dev/null
cp $cmd $target/$cmdpath
done