shell脚本基础
发布时间:2020-12-15 22:41:07 所属栏目:安全 来源:网络整理
导读:目录 1.变量 1.1 什么是变量? 1.2 变量名称注意事项 1.3 变量类型 1.4 变量操作 1.5 bash变量类型 1.5.1 本地变量 1.5.2 环境变量 1.5.3 位置变量 1.5.4 特殊变量 1.5.5 bash内建环境变量 1.5.6 只读变量(常量) 2. 脚本基础 2.1 什么是脚本? 2.2 程序返
目录
shell脚本基础 1.变量1.1 什么是变量?变量即可以变化的量,体现了脚本的灵活性 1.2 变量名称注意事项
1.3 变量类型
1.4 变量操作
1.5 bash变量类型
1.5.1 本地变量VAR_NAME=VALUE //本地变量,作用域为当前shell进程。对当前shell外的其它shell进程,包括当前shell的父shell、子shell进程均无效 local VAR_NAME=VALUE //局部变量,作用域为当前代码段,常用于函数 1.5.2 环境变量export VAR_NAME=VALUE //作用域为当前shell进程及其子进程 1.5.3 位置变量$1,$2,$3,.... //用来引用脚本的参数 shift [num] //位置变量使用完以后退出,后面的参数向前推进 1.5.4 特殊变量$# //是传给脚本的参数个数 $0 //是脚本本身的名字 $! //是shell最后运行的后台Process的PID [email?protected] //是传给脚本的所有参数的列表 $* //是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ //是脚本运行的当前进程ID号 $? //是显示上条命令的退出状态,0表示没有错误,其他表示有错误 1.5.5 bash内建环境变量PATH SHELL UID HISTSIZE HOME PWD HISTFILE PS1 1.5.6 只读变量(常量)readonly VAR_NAME=VALUE //不能修改值,不能销毁,只能等shell进程终止时随之消亡 2. 脚本基础2.1 什么是脚本?按实际需要,结合命令流程控制机制实现的源程序。说白点就是命令的堆砌。 2.2 程序返回值程序执行以后有两类返回值:
2.3 脚本测试bash如何测试脚本是否有错误?报错后如何排查? bash -n scriptname //检查脚本是否有语法错误 bash -x scriptname //单步执行,检查脚本错在哪里 2.4 写脚本注意事项
2.5 shell算术运算A=3 B=6 let C=$A+$B //let 算术运算表达式 C=$[$A+$B] //$[算术运算表达式] C=$(($A+$B)) //$((算术运算表达式)) C=`expr $A + $B` //expr 算术运算表达式,表达式中各操作数及运算符之间要有空隔,而且要使用命令引用 2.6 命令间的逻辑关系逻辑与:&& 第一个条件为假时,第二个条件不用再判断,最终结果已经有 第一个条件为真时,第二个条件必须得判断 逻辑或:|| 前一个命令的结果为真时,第二个命令就不执行 前一个命令的结果为假时,第二个命令必须执行 实验效果1.写一个脚本,要求如下: [[email?protected] ~]# vim 1.sh #!/bin/bash Fa=/etc/passwd numuser=$(cat $Fa |awk -F ":" '{print $1}' |wc -l) for((i=1;i<=$numuser;i=i+1));do username=$(cat $Fa |head -$i $Fa |tail -1 |awk -F ":" '{print $1}') userid=$(cat $Fa |head -$i $Fa |tail -1 |awk -F ":" '{print $3}') echo "Hello $username Your Uid is $userid" done echo "" echo "=====Have $numuser users=====" echo "" 2.写一个脚本,传递两个整数给此脚本,让脚本分别计算并显示这两个整数的和,差,积,商 [[email?protected] ~]# vim 2.sh #!/bin/bash a=$1 b=$2 echo "$a+$b=$[a+b]" echo "$a-$b=$[a-b]" echo "$a*$b=$[a*b]" echo "$a/$b=$(printf "%.2f" $(echo "scale=2;$a/$b"|bc))" [[email?protected] ~]# bash 2.sh 1 2 1+2=3 1-2=-1 1*2=2 1/2=0.50 [[email?protected] ~]# vim 2.sh 3.写一个脚本,要求如下:
[[email?protected] ~]# vim 3.sh #!/bin/bash rm -rf /tmp/scripts || echo "shou ci yun xing zheng chang bao cuo" userdel -r redhat mkdir /tmp/scripts cd /tmp/scripts cp -r /etc/pam.d /tmp/scripts/test useradd redhat chown -R redhat /tmp/scripts/test chmod -R o-rwx /tmp/scripts/test [[email?protected] ~]# ll /tmp/scripts/test/ 总用量 204 -rw-r-----. 1 redhat root 272 4月 2 23:53 atd -rw-r-----. 1 redhat root 192 4月 2 23:53 chfn -rw-r-----. 1 redhat root 192 4月 2 23:53 chsh -rw-r-----. 1 redhat root 759 4月 2 23:53 cockpit -rw-r-----. 1 redhat root 232 4月 2 23:53 config-util -rw-r-----. 1 redhat root 293 4月 2 23:53 crond -r--r-----. 1 redhat root 146 4月 2 23:53 cups -rw-r-----. 1 redhat root 163 4月 2 23:53 dovecot . . . -rw-r-----. 1 redhat root 278 4月 2 23:53 vmtoolsd -rw-r-----. 1 redhat root 335 4月 2 23:53 vsftpd -rw-r-----. 1 redhat root 277 4月 2 23:53 wbem -rw-r-----. 1 redhat root 163 4月 2 23:53 xserver 4.写一个脚本,要求如下:
[[email?protected] ~]# vim 4.sh #!/bin/bash rm -rf /tmp/lstest || echo "chu ci yun xing zheng chang bao cuo" date mkdir /tmp/lstest cd /tmp/lstest mkdir {a1b,b56e,6test} touch xy x2y 732 ls [ax6]* ls [[:alpha:]][[:digit:]]* [[email?protected] ~]# bash 4.sh 2019年 04月 02日 星期二 23:59:47 CST x2y xy 6test: a1b: x2y a1b: b56e: [[email?protected] ~]# ls /tmp/lstest/ 6test 732 a1b b56e x2y xy (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |