if 语句
使用if语句编写一个核对文件类型的脚本
#!/bin/bash
if
test -e $1
then
test -f $1 &&{
echo "这是一个文件"
}
test -L $1 &&{
echo "这是一个软链接"
}
test -S $1 &&{
echo "这是一个套接子"
}
test -b $1 &&{
echo "这是一个块设备"
}
test -d $1 &&{
echo "这是一个目录"
}
test -c $1 &&{
echo "这是一个字符设备"
}
else
echo "目标不存在"
fi
测试
编写一个用户建立的脚本
当文件数量不对时报错
文件不存在报错
行数差异报错
用户存在显示存在不改变密码
不存在建立用户并设定相应的密码
#!/bin/bash
if
[ "$#" != "2" ]
then
echo "please input the userfile and passwdfile !"
exit 0
elif
[ ! -e "$1" -o ! -e "$2" ]
then
echo "the file doesn't exist !"
exit 0
fi
A=$(awk 'END{print NR}' $1)
B=$(awk 'END{print NR}' $2)
if
[ "$A" != "$B" ]
then
echo "the lines of "$1" is not equal to the "$2""
else
for LINE_NUM in `seq 1 $A`
do
USERNAME=`sed -n "${LINE_NUM}p" $1`
PASSWORD=`sed -n "${LINE_NUM}p" $2`
Check_User=`getent passwd $USERNAME`
if
[ -n "$Check_User" ]
then
echo "the user "$USERNAME" has existed !"
else
useradd $USERNAME
echo $PASSWORD | passwd --stdin $USERNAME
fi
done
fi
编写一个小代码
当属于cat的时候输出dog
输入dog的时候输出cat
输入其他的时候报错
#!/bin/bash
if
[ "$1" = "dog" ]
then
echo cat
elif
[ "$1" = "cat" ]
then
echo dog
elif
[ "$1" != "dog" -a "$1" != "cat" ]
then
echo ERROR!
fi
但是这个方法有问题 如果输入刚好是在最后做判断 呢么会大大增加运行的时间
所以用到了 case语句
#!/bin/bash
case $1 in
dog)
echo cat
;;
cat)
echo dog
;;
*)
echo error
esac
~
使用脚本进行自动分区
这里用到了自动应答
#!/bin/bash
desk_message=`fdisk -l | awk '/Extended/'`
if
[ -z "$desk_message" ]
then
fdisk /dev/vdb <<EOF
n
e
wq
EOF
partprobe
fi
~
查看开着的主机 并将主机名写在文件内
自动应答 expect
首先下载expect
#!/bin/bash
set timeout 2
read -p "what is your name:" NAM
read -p "How old are you :" AGE
read -p "which is your major:" OBJ
read -p "Are you happy? " F
echo "$NAM is $AGE and study $OBJ feel $F"
其次
在调用expect回答所要回答的问题
#!/usr/bin/expect
set timeout 2
spawn /mnt/question_A.sh
expect {
name { send "hua\r";exp_continue } #name问题内的关键字 \r表示回车
old { send "20\r";exp_continue }
major { send "linux\r";exp_continue }
happy { send "happy\r" }
}
expect eof
关于计算的一些命令以及运行程序
Shell代码
1.
2. #!/bin/bash
3. ##示例1:10和12为两个参数分别对应$1和$2
4. echo 10 12 |awk '{printf("%d\n", $1+$2)}'
5.
6. ##示例2:a和b作为两个变量传入
7. a=10
8. b=12
9. echo |awk '{printf("%d\n", '$a'+'$b')}'
10.
11. ##示例3:COUNT_FAIL除以COUNT_INIT 保留4为小数,结果赋值给FAIL_INIT,[b]结果四舍五入[/b]。
12. COUNT_FAIL=10
13. COUNT_INIT=20 FAIL_INIT=`awk 'BEGIN{printf "%.4f\n",'$COUNT_FAIL'/'$COUNT_INIT'}'`
14. echo $FAIL_INIT
备注:示例2和示例3两种写法除数和被除数都要加“’”号(单引号),否则会报错“division by zero attempted”,另外“BEGIN”也很重要哦。
b.使用bc命令
Shell代码
1.
2. #!/bin/bash
3. ##示例1:输出 1+2 的运算结果
4. echo 1+2 |bc
5.
6. ##示例2:COUNT_FAIL除以COUNT_INIT 保留2为小数,结果赋值给FAIL_INIT,[b]结果不四舍五入[/b]。
7. FAIL_INIT=`echo "scale=2; $COUNT_FAIL/$COUNT_INIT" | bc`
c.使用expr命令
Shell代码
1.
2. #!/bin/bash
3. count=10
4. count=`expr $count + 12`
5. echo $count
d.使用let命令
Shell代码
1.
2. #!/bin/bash
3. ##示例1
4. let num1=10*20
5. echo $num1
6.
7. ##示例2
8. let "num2=10*20"
9. echo $num2
e.加双括号
Shell代码
1.
2. #!/bin/bash
3. ##示例1:双小括号
4. a=12
5. b=20
6. echo $((a*b))
7. echo $(($a*$b))
8.
9. ##示例2:中括号
10. c=10
11 echo $[c*20]
12echo $[$c*20]