What(是个啥)
shell作用是解释执行用户的命令。是脚本语言,编写执行方便快捷。
Why(为啥用)
用户想执行一条命令,可以用终端,但要执行多条命令时,用shell会更加高效方便。
How(咋个用)
基本语法
- 通常第一行加入“#!/bin/bash"指定运行解释器
- 赋值变量,等号两边不能有空格
- 使用’ 或 者 " 或者" 或者"{}"来获取变量
常用方式
控制语句1
- if,then, elif,else,fi
if [ -f $a ];then
echo "hello world!"
fi
注意事项
每一组if , then的结束都应附上一个fi与if对应
[]应当注意用空格隔开,]后紧跟;
[]内的条件与[ 、]都有一个空格相隔。
控制语句2
- case, esac
Shell脚本的case可以匹配字符串和Wildcard
只匹配一个分支,然后就跳出
case “$var” in
conditionl )
statments1;;
conditionl )
statment2;;
…
* ) default statements;;
esac
注意事项
conditionl(条件) 使用 空格 与 )隔开
statement*(行为) 后使用两个 ;; 结尾
- ) 后陈诉 除 以之前的 statements 之外的情况
使用 esac 与 case 呼应结尾
控制语句3
- for, do, done (for循环语句)
Shell脚本的case可以匹配字符串和Wildcard
只匹配一个分支,然后就跳出
for var in list
do
statement
done
var是要列举的变量,list是变量var的一个集合,do....done中的语句表示在list 中还 未被列举完 时需要执行的语句
注意事项
for后面的变量不加$,但在do...done中要使用 var变量时需要加上$
若使用()将list括起来时,list中的内容将会被视为一个元素
当for后没有跟in [list]部分时,则循环控制变量将取遍命令行的所有参数
当在shell界面写脚本语句时,若for语句和do语句都写在同一行,则for语句后面需要用;
for a in $(ls /home/www/)
do
if [ -f $a ]
iconv -f utf-8 -t gbk $a
fi
done
批量解压
for dir in test1/*
do
if test -f $dir
then
brr=$(echo $dir | tr "." "\n")
brrs=( $brr )
fileid=${brrs[0]}
echo $fileid
mkdir $fileid
tar -xvf $dir -C $fileid
fi
done
控制语句4
- while, do, done (while循环语句)
COUNTER=1
while [ "$COUNTER" -lt 10 ]; do
echo "Here we go again"
COUNTER=$(($COUNTER+1))
done