bash 脚本笔记

来源:互联网 发布:若风淘宝店服装店网址 编辑:程序博客网 时间:2024/04/28 21:39

1. sh 参数

$* 输入了什么参数
$# 输入了多少个参数
$1 输入的第一个参数,依此类推,直到 $9
$? 上一次的执行结果
$* 为”1 2 3”(一起被引号包住)
$@ 为”1” “2” “3”(分别被包住)
$# 为3(参数数量)

2. 文件测试

  1. [ -d target ] target 是否是 目录
  2. [ -f target ] 是否是文件
  3. [ -e target ] 是否存在(目录和文件都适用)
  4. [ -x target ] 可执行文件
  5. [ -n “target” ] 是否为null,用双引号把变量名括

3. 数值型比较

    //变量赋值时,”=” 左右两边不能有空格    age=30    if [ $ -ge 20]    then        echo“age is bigger than 20else        echo“age is less than 20fi    // ---others-----    –eq(equals)    –ne(not equal)    -gt( greater than)    -lt(lessthan)    -ge(greater or equal than)    -le(less than or equal )

eg:

    bootpercent= df –hT | grep “sda1” | awk “{print $6}” | cut –d "%" –f1       if [$bootpercent –ge 80 ];then            echo "percent is bigger than 80,warning!!!"        else            echo "percent is less than 80"       fi

4. 字符串比较

```bash# "=" 需要空格[ str1= str2 ] # str 是否为空[ -z str ]```

5. 逻辑条件测试

&& ||
if

 If [ $age–ge 30 ];then    echo "great than 30" elif [ $age –ge 40 ];then    echo “great then 40else    echo50fi

case

 #`` 里面是命令:今天周几 week= `date +%w`         case$week in :         start):            echo“start”            ;;        stop):            echo“stop”            ;;        *):            Echo “other”            ;;        esac

6. 循环条件测试

while

num=3while [ $num –ge 0 ]do    echo$num    num=$(($num-1)) # ‘=’左边的num不需要$ ?done    echo$num

for

for i in ` cat /var/user.txt`do    echo$i    echo123 | passwd –stdin $idone

7. shift:传入的参数左移

num=0while [ $# -gt 0 ]do        num=$((num+ $1))        shiftdone        echo $num

8. find

find/etc/ -perm 755type f# 跟find /etc –perm 755 | find –type f 不是一样,切记find /etc –user rootfind /etc –iname 'user*' | xargs rm –f

9. awk

# $0->整行,$1->第一列# NR(Number Row):行号# NF(Number Field):列号cat/etc/passwd | awk –F ":" '{if(NR==3)print $1,$4}' ->打印第三行的第一个和第四个字段cat/etc/passwd | awk –F 'END{print NR}' ->总共多少行cat/etc/passwd | awk –F ‘END{print NF}’ ->总共多少列cat/etc/passwd | awk –F “:” ‘{if(){print $1”\t”$4}}’cat/etc/passwd | awk ‘$1 ~/192.168.10.1/ {print $0 } ’  -> ~ 匹配,!~ 不匹配

10.sed

# p -> print, d-> deletecat/etc/passwd | sed –n '5'p –> 打印第五行cat/etc/passwd | sed '3,6'd -> 打印删除3-6行之后的内容cat/etc/passwd | sed '/bash/' p -> 打印匹配bash 的行cat/etc/passwd | sed –n '1,/sync/'p -> 打印第一行到匹配sync的行cat/etc/passwd | sed –n '/root/,$'p -> 打印从匹配root 到结尾的所有行cat/etc/passwd | sed –n '3'p | awk –F ":" '{print $4}' –> 39%cat/etc/passwd | sed –n '3'p | awk –F ":" '{print int($4)}' –> 39

11. uniq 与 sort

uniq–c  #统计连续的次数catfile | sort –t: -k1 –r # 以:为分隔符,取第一列,倒序排列

12. linux 启动流程

一:初始化阶段

  1. Grub 引导界面
  2. 识别硬件
  3. 初始化驱动

二:加载/etc/rc.d/rc.sysinit 系统初始化

  1. 进入欢迎界面
  2. 设置时钟
  3. 设置主机名
  4. 挂载文件系统
  5. 挂载光驱
  6. 进入3级别
  7. 启动虚拟内存
  8. 设置磁盘阵列

三:加载 /etc/rc.d/rc 进程管理脚本

  1. 设置防火墙
  2. 检测硬件变化
  3. 启动网络服务
  4. 启动3级别中允许启动的进程(/etc/rc.d/rc3.d中以S开头的服务名,S99以后就是登陆界面了)
  5. 进入登陆界面

13. 运行级别:(默认是3)

0: halt
1: singlemode user
2: multiuser without NFS
3: full multiuser
4: unused
5: X11 ( 3 with 图形界面)
6: reboot (所以,重启的话reboot,还可以 init 6)
查看运行级别 runlevel

14. 如何设置服务脚本在某个级别下开启或者关闭(以sshd为例)

  1. 查看sshd 服务在所有级别下的开关状态
    chkconfig –list sshd
  2. sshd 在 3 级别下开启/关闭
    chkconfig –level 3 sshd on/off
  3. 将自己的服务脚本改造成标准的rpm脚本
    cp sshd /etc/init.d

    在 xxx 中添加:
    #chkconfig:2345 90 20 (90为开机的顺序,20为关机的顺序,数值越大,优先级越高,自定义的脚本开机应较晚5,关机较早)
    #descrption: xxx server daemon

  4. 通过service 把自定义脚本进行开启和关闭
    service xxx start|stop|restart

  5. 通过chkconfig把自定义脚本设置为开机启动
    chkconfig xxx on/off

15. 原格式输出字符以及调用其他脚本

menu.sh

# Cat 的 heredoc使用方法# cat << eof              aaaaaaaaaaaaaa              bbbbbbbbbbbbb              cccccccccccccccc  eof
# 引用 menu.sh. menu.sh 

16. 设置颜色

# \033[ 设置颜色的标志,30 前底色,47 背景色,0m 还原echo –e "\033[30;47m $str \033[0m"
0 0
原创粉丝点击