7. if 判断一些特殊用法
if [ -z $a ] 这个表示当变量a的值为空时会怎么样if grep -q '123' 1.txt; then 表示如果1.txt中含有'123'的行时会怎么样if [ ! -e file ]; then 表示文件不存在时会怎么样if (($a<1)); then …等同于 if [ $a -lt 1 ]; then… [ ] 中不能使用<,>,==,!=,>=,<=这样的符号if [ ! $a -gt 0 ];then... 代表不大于0
if [ -z $n1 ] 为空
if [ -n $n1 ] 不为空if [ ! -z $n1 ]8. shell中的case判断
格式: case 变量名 in value1) command ;; value2) command ;; *) commond ;; esac 求余!!vim case.sh!# /bin/bashn1=`echo $1 |sed 's/[0-9]//g'`if [ -z $n1 ]; thenm=$[$1%2]case $m in 1) echo "the number is odd" ;; 0) echo "the number is even" ;; *) echo "is other" ;;esacelse echo "the character you input not a number"fi sh case.sh 6 $1代表第一个参数9. shell脚本中的循环
for循环 语法结构: for 变量名 in 条件; do … done while 循环语法结构: while 条件; do … done 死循环用:表示break直接结束本层循环(跳出整个循环); continue忽略continue之下的代码(跳出本次循环),直接进行下一次循环 exit 直接退出shell序列
seq 1 [步长] 10 默认是1seq 1 10 seq 10 -1 1seq 10 -2 1seq 1 2 10seq -w 1 100 宽度一样 ============
001002...100===============vim for.sh!# /bin/bashfor i in `seq 1 10`do echo $idone==========
vim for.sh!# /bin/bashfor file in `ls`do ls -ld $filedone=========
vim for.sh!# /bin/bashsum=0for n in `seq 1 100`do sum=$[$sum+$n]doneecho $sum==========while死循环
vim while.sh!# /bin/bashn1=1 这里可以是任意值while [ ! -z $n1 ]do read -p "input a number:" n n1=`echo $n |sed 's/[0-9]//g'`doneecho "the number is $n."===========vim break.sh!# /bin/bashfor i in 1 2 3 4 5do echo $i if [ $i -eq 3 ] then break fi echo $idone
10. shell中的函数函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。格式: function f_name() { command }函数必须要放在最前面函数里可以export 全局变量===============function mysum() { sum=$[$1+$2] echo $sum}s=`mysum 1 2`echo $s===============function mysum() { sum=$[$1+$2] return $sum}mysum 1 2echo $?=============function mysum() { sum=$[$1+$2] 如果在sum前面加local就在函数里面生效}mysum 1 10echo $sum===========
11. shell练习题
编写shell脚本,计算1-100的和;编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;vim sum.sh
!# /bin/bashif_nu() { n1=`echo $1|sed 's/[0-9]//g'` if [ -z $n1 ] then if [ $1 -gt 1 ]; then return 1; else return 0;fi else return 0 fi}read -p "input a number :" n
if_nu $nn2=`echo $?`if [ $n2 -eq 1 ]then sum=0 for i in `seq 1 $n` do sum=$[$sum+$i] done echo $sumelse echo "the character you input is not number"fi
编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;
find /root -maxdepth 1 -type d 搜索root下的一级目录===========for d in `ls /root/`; do if [ -d $d ]; then cp -r $d /tmp/;fi; donefor d in `find /root -maxdepth 1 -type d`; do if [ -d $d ]; then cp -r $d /tmp/;fi; done
编写shell脚本,批量建立用户user_00, user_01, ... user_100并且所有用户同属于users组;
for i in `seq -w 0 99`; do useradd -g users user_$i; done
编写shell脚本,截取文件test.log中包含关键词 ‘abc’ 的行中的第一列(假设分隔符为 ”:” ),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;
awk -F: '/abc/ {print $1}' test.log |sort |uniq -c |sort -n |awk '$1>10'