linux上写bash文件,linux笔记之bash编程(一)

bash脚本编程的基本知识

1、bash脚本是什么文件,bash脚本是怎么运行的?

答:bash脚本是个shell脚本文本,shell脚本是文本文件,内核不能让其直接运行,但是当内核读取脚本文件的第一行,发现是一个脚本文件,并定义了用来解释执行脚本的bash的脚本程序,然后内核启动一个bash进程用来解释执行这个脚本。这就说明bash脚本是由bash程序解释执行的。

2、bash为什么能解释执行bash脚本?

答:bash能够提供一些内部命令,并且能通过PATH环境变量找到外部命令,把命令提交给内核启动为进程。

3、bash是哪种类型的编程语言?流程控制语句由哪些?

答:bash是面向过程的编程语言,流程控制语句有:顺序执行、循环执行、选择执行。

4、bash编程的基本元素有哪些?变量:局部变量:作用域通常是某个代码片段,声明变量时,在前面添加local关键字, 并且只能应用在函数里面,其作用域只是在当前函数块,及其子函数内可见。

本地变量:本地变量也成为全局变量,其作用范围是整个脚本。

环境变量:Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组变量的定义,因此这些变量称之为环境变量。

位置参数变量:位置参数变量是为了解决,用户向脚本传递参数设定的,$1表示的是用户向脚本传递的第一个参数、$2表示的是用户向脚本传递的第二个参数,以此类推。

特殊变量:是代表一些特殊含义的变量:$0表示获取当前运行脚本名;$#表示向脚本传递参数的个数,$*表示脚本的参数列表。

流程:顺序执行:从第一条语句向下执行。

循环执行:重复执行一段代码,满足特定条件不执行。

选择执行:通过条件判断,选择执行某一代码。

函数:函数的作用是使代码重用,实现模块化编程,是脚本代码的结构清晰。

数组:数组是连续的多个独立内存空间,每个内存空间相当于一个变量。

算术运算格式:$[ 运算表达式 ]                例如: sum=$[ $sum+$i ]

let 变量名=运算表达式          例如:let sum=$sum+$i

$((运算表达式))                例如:sum=$(($sum+$i))

$(expr 变量1  变量2  变量3)

5、bash脚本的编写格式?

答:第一行:必须顶格声明解释器;#!/bin/bash。注释行:所有以#开头的行均为注释行;会被解释器忽略。

实例:编写一个脚本,每5秒,检测某个用户是否登录,用户登录就输出信息并推出脚本。

vim who.sh#!/bin/bash

#*****************************************************************************************

#                              Check user login System                                   *

#                              zouhg 2014-12-3                                           *

#*****************************************************************************************

#*****************************************************************************************

#                               Mian function code                                       *

#*****************************************************************************************

read -p "Please enter a username:" username

while ! who |grep "^$username";do

sleep 5

done

echo "$username logined system!"

6、脚本有哪些执行方式?

答:方法一:赋予脚本执行权限,指明路径执行

实例:赋予脚本执行权限:chmod +x who.sh

执行脚本:./who.sh

方法二:用bash程序解释执行;就是直接传递脚本给bash解释器

实例:检测脚本语法是否有错误:bash  -n  who.sh

使用bash程序解释执行脚本:bash   who.sh

调试运行脚本:bash  -x   who.sh

7、bash流程控制之循环执行:for、while、until

for循环的详细讲解:

for   变量名  in  列表;do

循环体

done

for循环结构解析:每次循环都是将列表中的元素的值赋值给变量,循环的次数是列表中的元素的个数;列表是至少包含一个元素的字符串集合。

列表的获取方式:(1)直接给出;

(2)数值列表:{起始值..结束值}            例如:{1..10}

$(seq 结束值)               例如:$(seq 10)

$(seq 起始值  结束值)        例如:$(seq 1 10)

$(seq 起始值  步长  结束值)  例如:$(seq 1 2 10)

($3)使用命令替换获取列表:$(命令)

实例:添加三个用户user1,user2,user3;密码同用户名:

vim useradd.sh

#!/bin/bash

#*****************************************************************************************

#                              Check user login System                                   *

#                              zouhg 2014-12-3                                           *

#*****************************************************************************************

#*****************************************************************************************

#                               Mian function code                                       *

#*****************************************************************************************

for i in {1..3};do

useradd user$1

echo user$1 |passwd --stdin user$1

done

for的C编程风格格式:

for  ((变量赋值;循环条件;修正表达式));do

循环体

done

实例:探测192.168.1.0内的所有主机,是否在线。

vim pingC.sh

#!/bin/bash

#*****************************************************************************************

#                              Check user login System                                   *

#                              zouhg 2014-12-3                                           *

#*****************************************************************************************

#*****************************************************************************************

#                               Mian function code                                       *

#*****************************************************************************************

for ((i=1;1<255;i++));do

ping -t1 -w1 192.168.1.$i

done

for循环支持嵌套格式:

for i in list1 ;do

执行体1

for  j   in  list2 ;do

执行体2

done

done

实例:探测172.16.0.0内的所有主机,是否在线。

vim pingB.sh

#!/bin/bash

#*****************************************************************************************

#                              Check user login System                                   *

#                              zouhg 2014-12-3                                           *

#*****************************************************************************************

#*****************************************************************************************

#                               Mian function code                                       *

#*****************************************************************************************

for i in {0..255};do

for j in {1..254};do

ping -t1 -w1 172.16.$i.$j

done

done

while循环的详细讲解:

while  条件表达式  ;do

循环体

循环控制变量的修正表达式

done

while循环结构解析:当条件表达式为真时,执行循环体和循环控制变量的修正表达式;当条件表达式为假时退出循环

实例:统计1-100正整数之和

#!/bin/bash

#*****************************************************************************************

#                              Check user login System                                   *

#                              zouhg 2014-12-3                                           *

#*****************************************************************************************

#*****************************************************************************************

#                               Mian function code                                       *

#*****************************************************************************************

declare -i sum=0

declare -i i=1

while [ $i -le 100 ];do

sum=$[$sum+$i]

let i++

done

echo "1-100 sum is: $sum"

while循环的详细讲解:

nutil  条件表达式  ;do

循环体

循环控制变量的修正表达式

done

until循环结构解析:当条件表达式为假时,执行循环体和循环控制变量的修正表达式;当条件为真时退出循环

实例:使用until循环统计1-100正整数之和

#!/bin/bash

#*****************************************************************************************

#                              Check user login System                                   *

#                              zouhg 2014-12-3                                           *

#*****************************************************************************************

#*****************************************************************************************

#                               Mian function code                                       *

#*****************************************************************************************

declare -i sum=0

declare -i i=1

until [ $i -gt 100 ];do

sum=$[$sum+$i]

let i++

done

echo "1-100 sum is: $sum"

循环控制命令:(1)break [N] 提前退出N层循环;N省略时表示退出break语句所在的循环

(2)continue [N] 提前退出第N层的本轮循环,而直接进入下一轮

实例:使用break,取10个随机数并排序

#!/bin/bash

#*****************************************************************************************

#                              Check user login System                                   *

#                              zouhg 2014-12-3                                           *

#*****************************************************************************************

#*****************************************************************************************

#                               Mian function code                                       *

#*****************************************************************************************

main(){

declare -a rand

declare -i swap=0

declare -i j=0

for i in {0..9};do

j=$i

rand[$i]=$RANDOM

while [ $j -gt 0 ];do

if [ ${rand[$j]} -lt ${rand[$[$j-1]]} ];then

swap=${rand[$j]}

rand[$j]=${rand[$[$j-1]]}

rand[$[$j-1]]=$swap

let j--

else

break

fi

done

let i++

done

echo  ${rand[@]}

}

main

死循环格式:

while  true;do

循环体

done

while死循环结构解析:在while死循环中,循环体会一直执行,除非用break结束循环,或用exit退出脚本

实例:使用while死循环随机取(1-37)中的两个数,并这两个数不能重复#!/bin/bash

#*****************************************************************************************

#                              Check user login System                                   *

#                              zouhg 2014-12-3                                           *

#*****************************************************************************************

#*****************************************************************************************

#                               Mian function code                                       *

#*****************************************************************************************

declare -i student1=0

declare -i student2=0

while true ;do

if [ $student1 -eq $student2 -o $student1 -eq 0 -o $student2 -eq 0 ];then

student1=$[$RANDOM%37]

student2=$[$RANDOM%37]

else

echo "The first student ID:$student1"

echo "The second student ID:$student2"

break

fi

done

until  true;do

循环体

done

until死循环结构解析:在until死循环中,循环体会一直执行,除非用break结束循环,或用exit退出脚本

实例:使用while死循环随机取(1-37)中的两个数,并这两个数不能重复

#!/bin/bash

#*****************************************************************************************

#                              Check user login System                                   *

#                              zouhg 2014-12-3                                           *

#*****************************************************************************************

#*****************************************************************************************

#                               Mian function code                                       *

#*****************************************************************************************

declare -i student1=0

declare -i student2=0

until false ;do

if [ $student1 -eq $student2 -o $student1 -eq 0 -o $student2 -eq 0 ];then

student1=$[$RANDOM%37]

student2=$[$RANDOM%37]

else

echo "The first student ID:$student1"

echo "The second student ID:$student2"

exit 0

fi

done

bash脚本编程的其他内容在:linux笔记之bash编程(二)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值