Bash基础
shell为Linux提供了编程环境
程序=指令+数据
编程风格
过程式:以指令为中心,数据服务于命令
对象式:以数据为中心,命令服务于数据
shell是一种过程式的编程
过程式编程
顺序执行
循环执行
选择执行
shell脚本:文本文件#!/bin/bash
运行脚本:
给予执行权限,通过具体的文件路径指定文件执行
直接运行解释器,将脚本作为解释器程序的参数运行
变量
变量命名规则:
命名只能使用英文字母,数字和下划线,首字母不能以数字开头
中间不能够有开头,可以使用_下划线
不能使用标点符号
不能使用bash中的关键字
*使用变量:
定义变量:your_name=”liuchang”
使用变量:echo $your_name或者echo ${your_name}
其中,建议使用{}作为边界
只读变量
#!/bin/bash
myUrl=”http://www.google.com
readonly myUrl
myUrl=”http://www.runoob.com
执行脚本之后,显示只读变量无法修改
**
删除变量
#!/bin/sh
myUrl=”http://www.runoob.com
unset myUrl
echo $myUrl
*
变量种类
本地变量:生效范围仅为当前shell进程;其他shell,当前的字shell进程均无效
环境变量:生效范围为的当前shell进程以及子进程
局部变量:生效范围为当前shell进程中某代码片段(通常指函数)
位置变量:让脚本在脚本代码中调用通过命令行传递它的参数
特殊变量:?,0,*,@,$#
本地变量
变量赋值name=”value”
环境变量
变量声明1:export name=”value”
变量声明2:declare-x name=”value”
bash中有很多的内建的变量环境:SHELL,PATH等等
位置变量
$1,$2,…对应调用第一个第二个参数
$0:命令本身
$:传递给脚本所有的参数(把所有参数当做整体)
$@:传递给脚本所有的参数
$#:传递给脚本参数的个数
案例一:myecho.sh
忽略??????不理解的
案例二:判断所给文件的行数
linecount.sh
#!/bin/bash
linecount=”$(wc -l $1 | cut -d’ ‘ -f1)” #wc查阅文件的行数、字数以及字节数-l显示行数
echo “This file have ${linecount} lines” 使用变量一般是${变量名}
**shell数组
语法格式:array_name=(value1….valuen)
实例:
my_array=(A B “C” D)
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
读取数组:${array_name[index]} #index索引
读取数组中的所有元素:
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo “数组的元素为: ${my_array[
]}” #所有
echo “数组的元素为: ${my_array[@]}” #所有
运行结果:
[root@Liu tmp]# bash shuzu.sh
shuzu.sh:行5: echo 数组的元素为: A B C D: 未找到命令
获取数组的长度:
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo “数组的个数为:${#my_array[]}”
echo “数组的个数为:${#my_array[@]}”
环境配置
—bash配置文件
生效范围分类:
全局配置:
/etc/bashrc
/etc/profile
/etc/profile.d/
.sh
个人配置:
~/.bash_profile
~/.bashrc
功能:
用于定义环境变量
运行命令或者脚本
功能分类
profile类:为交互式的shell提供配置
全局:/etc/profile /etc/profile.d/
.sh
个人:~bash_profile
**shell远程登录
交互式登录:su - USERNAME
非交互式登录:su USERNAME
bash中的算数运算符
+ - / % ** ….
完成算数运算:
(1)let var (变量名)=算术表达式
(2)var=$[算术表达式]
(3)var=$((算术表达式))
(4)var=$(expr arg1 arg2 arg3…)
乘法符号有些场景需要转义:
\
bash有内建的随机数生成器:$RANDOM
增强赋值:
+=,-=,*=,/=,%=

练习题

练习1:计算/etc/passwd文件中第10个用户的第20个用户的ID之和
#!/bin/bash
userid1=$(sed -n ‘10p’)