常用shell脚本总结

一、计算100以内奇偶数的和的几种方法

1)、方法一 {1..100..2}

[root@station78 scirtp]# cat 6.sh
#!/bin/sh
evensum=0
for i  in {1..100..2}
do
        evensum=$[$evensum+$i]
done
echo "1+3+5+...=$evensum"
oddsum=0
for I  in {2..100..2}
do
        oddsum=$[$oddsum+$I]
done
echo "2+4+6+..=:$oddsum."
[root@station78 scirtp]# sh 6.sh
1+3+5+...=2500
2+4+6+..=:2550.


2)、方法二 `seq 1 2 100`

[root@station78 scirtp]# cat 6.sh
#!/bin/sh
evensum=0
for i  in `seq 1 2 100`
do
        evensum=$[$evensum+$i]
done
echo "1+3+5+...=$evensum"
oddsum=0
for I  in {2..100..2}
do
        oddsum=$[$oddsum+$I]
done
echo "2+4+6+..=:$oddsum."
[root@station78 scirtp]# sh 6.sh
1+3+5+...=2500
2+4+6+..=:2550.
[root@station78 scirtp]#


3)、方法三 使用单个for循环

[root@station78 scirtp]# cat 5.sh
#!/bin/sh
oddsum=0
evensum=0
for i in {1..100}
do
    if [ $[$i%2] -eq 0 ]
         then
          oddsum=$[$oddsum+$i]
        else
            evensum=$[$evensum+$i]
fi
done
echo "2+4+6+..=$oddsum"
echo "1+3+5+..=$evensum"
[root@station78 scirtp]# sh 5.sh
2+4+6+..=2550
1+3+5+..=2500
[root@station78 scirtp]#

二、批量创建用户

1、添加10个用户user1, user2, ..., user10;并设置密码,但要先判断用户是否存在,不存在而后再添加;

2、添加完成后,显示一共添加了几个用户;当然,不能包括因为事先存在而没有添加的;

3、最后显示当前系统上共有多少个用户

shell 脚本总结(常用脚本)_第1张图片

   删除用户同理,这里就偷懒了。。


三、位置变量的应用($!,$@,$2....)

1)、使用位置变量($1),查看输入的用户是否是计算机已有的用户,如果是则比较其uidgid是否相同。

[root@station78 scirtp]# cat 4.sh
#!/bin/sh
if id $1 &> /dev/null
then
    echo "$1  exists"
  if [ `id -u $1` -eq  `id -g $1` ]
    then
    echo "$1 uid 等于gid"
    else
    echo "$1 uid 不等于gid"
   fi
else
    echo "$1 no exists"
fi
                                                                                                                                                                                                                                                                                      
[root@station78 scirtp]# sh 4.sh root
root  exists
root uid 等于gid
[root@station78 scirtp]# sh 4.sh roott
roott no exists
[root@station78 scirtp]# sh 4.sh uucp
uucp  exists
uucp uid 不等于gid

2)、通过参数传递一系列用户名(a,b,c,d) 给脚本,让脚本添加这些用户;但要先判断用户是否存在,不存在而后再添加;添加完成后,显示一共添加了几个用户;当然,不能包括因为事先存在而没有添加的;

使用$@位置变量

[root@station78 scirtp]# cat 7.sh
#!/bin/bash
#
Count=0
for UserName in $@; do
  if id $UserName &> /dev/null; then
    echo "$UserName exists."
  else
    useradd $UserName
    echo "Add $UserName successfully."
    Count=$[$Count+1]
  fi
done
echo "Add $Count new users."
[root@station78 scirtp]# sh 7.sh a b c d
Add a successfully.
Add b successfully.
Add c successfully.
Add d successfully.
Add 4 new users.
[root@station78 scirtp]# tail -4 /etc/passwd
a:x:4039:4039::/home/a:/bin/bash
b:x:4040:4040::/home/b:/bin/bash
c:x:4041:4041::/home/c:/bin/bash
d:x:4042:4042::/home/d:/bin/bash
[root@station78 scirtp]#si


四、shell中的字符串比较

通过位置变量判断一个用户是否是bash用户

shell 脚本总结(常用脚本)_第2张图片

改进之后

shell 脚本总结(常用脚本)_第3张图片

后续。。。。。。

在使用for循环在遇到的疑惑,曾经以为for循环定义的变量在for循环中一定要调用,这样说可能不太理解,我也有点晕了,还是举例吧

shell 脚本总结(常用脚本)_第4张图片


没有使用变量,只是循环了5次

shell 脚本总结(常用脚本)_第5张图片

补充

Linux系统下批量改变文件名大小写

将某个文件夹下所有的文件名字里的大写字母改成小写字母

for file in `ls | grep '[A-Z]'`
do
str=`echo $file|tr 'A-Z' 'a-z'`
mv $file $str
done
1)ls | grep '[A-Z]' :ls 出所有含有大写字母的文件
2)for file in `command` :for 循环
3)echo AVdxFV | tr 'A-Z' 'a-z' : 把'AVdxFV' 中所有的大写换成小写字母; tr :translate的意思,具体看help


小编shell脚本能力有限,不足之处还望各位博友多提宝贵意见,继续改进,希望我们共同进步。。