第一次自己总结写技术性博客,总结了这么多天还是不知道怎么写,还请大家多多指教 。
shell script 是利用shell的功能所写的一个“程序”, 这个程序是使用纯文本文件,将一些shell的语法与命令写在里面,搭配正则表达式、管道命令与数据流重定向等功能,已达到我们所想要的处理目的 。
shell script的作用有 :
自动化管理
跟踪与管理系统
简单的入侵检测
连续命令单一化
简单的数据处理 (但是由于shell script的速度较慢,且使用cpu的资源较多 所 以在处理数据的速度上 不太够用 )
if、case、for、while、until、条件测试、函数、break、continue、算术运算、命令替换
if ..then 最常见的条件判断式
1、单层简单条件判断式
- if [ 条件判断 ];then
- 当条件判断成立时,执行的语句
- fi
example:如果user1 存在 就显示 exist
- if id user1 &>/dev/null ;then
- echo "user1 is exist."
- fi
2、多重复杂条件判断
- if [ 条件判断式1 ];then
- 条件判断式1成立时 执行的语句
- elif [ 条件判断式2 ];then
- 条件判断式2成立时 执行的语句
- else
- 当条件12 都不满足时 执行的语句
- fi
- read -p "your choice:" CHOICE
- if [[ "CHOICE" = "U" -o "CHOICE" = "u" ]];then
- id -u $USERNAME
- elif [[ "CHOICE" = "G" -o "CHOICE" = "g" ]];then
- id -g $USERNAME
- elif [[ "CHOICE" = "S" -o "CHOICE" = "s" ]];then
- grep "^$USERNAME\>" /etc/passwd | cut -d: -f7
- elif [[ "CHOICE" = "Q" -o "CHOICE" = "q" ]];then
- echo "quit"
- exit 0
- else
- echo "wrong choice"
- fi
case ..esac 判断
- case $变量名称 in
- "第一个变量内容")
- 程序段 ;;
- "第二个变量内容")
- 程序段;;
- *)
- 程序段;;
- esac
example :
- read -p "input a username:" USERNAME
- read -p "input you choice :" CHOICE
- case $CHOICE in
- U|u)
- id -u $USERNAME;;
- G|g)
- id -g $USERNAME;;
- S|s)
- grep "^$USERNAME\>:" /etc/passwd |cut -d: -f7;;
- Q|q)
- exit;;
- *)
- echo "please input a right choice"
- esac
for
for ..do..done (固定循环,已经知道要循环几次)
- for I in con1 con2 con3..
- do
- 程序段
- done
- 第一次循环 $I 的内容为 con1
- 第一次循环 $I 的内容为 con2
- 第一次循环 $I 的内容为 con3
example :添加三个用户
- for USER in user1 user2 user3; do
- useradd $USER
- done
example :计算从1加到100
- declare -i SUM=0
- for I in {1..100}
- do
- SUM=$[$SUM+$I]
- done
- echo $SUM
example :查看系统上的每一个账号
- users=$(cut -d: -f1 /etc/passwd) #获取账号
- for username in $users ;do
- id $username
- finger $username
- done
while until 都是不定循环 即循环的次数不固定 只要满足条件 即可
- while [条件判断式];do # 条件满足就就循环 不满足 就退出循环
- 程序段落
- done
- until [条件判断式];do # 条件不满足就循环 满足就退出循环
- 程序段落
- done
example:用户输入Y或者y 才结束循环
- while [ "$yn" != "y" -a "$yn" != "Y" ];do
- read -p "please input y|Y to stop this program :" yn
- done
- echo "ok ! you input the correct answer."
- until [ "$yn" = "y" -o "$yn" = "Y" ];do
- read -p "please input y|Y to stop this program :" yn
- done
- echo "ok ! you input the correct answer."
条件测试:
shell提供了对字符串、文件、数值及逻辑操作等内容的条件测试的支持。
一般有三种格式 :
[ expression ]
[[ expression ]] 使用方括号时,要注意在条件两边加上空格
test expression
两个文件之间的比较:
-ef 判断file1 与file2 是否为同一个文件,主要意义在于判断了两个文 件是否指 向同一个inode 号
-nt 判断 file1 是否比file2 新
-ot 判断file1 是否比file2 旧
多重条件判断:
-a 两个条件同时成立
-o 任何一个条件成立
! 反向状态
函数 :最大的功能就是 简化程序代码。可以多次调用
- fname(){
- 程序段
- }
example :
- #!/bin/bash
- #
- showecho() {
- echo "How are you?"
- }
- for I in {1..10}; do
- echo $I
- showecho 函数调用
- done
break结束循环 continue结束本次循环进行下一轮循环
- #!/bin/bash
- declare -i I=0
- while true ;do
- let I++
- echo "$I"
- if [ $I -ge 10 ];then
- break $I大于等于10 就退出循环
- else
- continue $I 小于10 就进入下一轮循环
- fi
- done
- 结果是 1 2 3 4 5 6 7 8 9 10
算数运算 :
+ - * / %
常用方法 : 复制给变量 使用echo 回显
- #SUM=$[2+3]
- #echo $SUM
- 5
- #let SUM=2+4
- #echo $SUM
- #SUM=$((2+5))
- #echo $SUM
- #expr 2 + 3 # 直接显示结果
- 5
- SUM=`expr 2 + 3`
- #echo $SUM
判断奇数偶数
- read -p "please input a number :" I
- [ $[$I%2] -eq 0 ] && echo "even " || echo "odd"
命令替换:
两种形式 `COMMAND` $(COMMAND)
- sun=`id -u www`
- # echo $sun
- 508
- # sun=$(id -u www)
- # echo $sun
- 508