目录
一. shell简介
二. shell变量
1.用户变量
2.环境变量
3.特殊变量
三.字符串数据类型
四.shell命令和shell脚本
五.语句
1.if语句
2.循环语句
3.输入输出
4.命令执行
5.运算符
Shell语言:是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁
shell编程:通常指的是学习shell命令语法后,利用这套语法开发脚本程序,操作、访问内核服务。而不是使用C语言去编写一个shell程序。
shell解释器: unix默认sh,Linux的默认是Bash:全称是bash shell,bash兼容sh,针对sh编写的Shell代码可以不加修改地在bash中运行。
shell中有3种变量: 用户变量、环境变量、特殊变量
用户变量在编程过程中使用量最多
环境变量主要是在程序运行时需要设置
特殊变量在对参数判断和命令返回值判断时会使用
变量的定义语法: 变量名=变量值
变量的定义需遵循的规则
1):变量名可以由字母、数字和下划线组成,但是不能以数字开头,不能使用关键字,严格区分大小写
2):在 Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须使用特殊命令
3):变量用等号"="连接值,"="左右两侧不能有空格。
4):变量值建议用中如果有空格,则需要使用单引号或双引号包含,如 test="hello world!"
5):在变量值中,可以使用转义符"\"。
定义普通变量: 变量名=变量值 注意: "="左右两侧不能有空格!!!
定义只读变量: readonly 变量名=变量值 注意: 只读变量生命周期窗口关闭或者脚本执行结束
获取变量值: $变量名 或者 ${变量名} 建议: 使用${变量名} 因为它能标识变量的边界范围
删除普通变量: unset 变量名 注意: unset不能删除只读变量
修改普通变量值: 已有变量名=新变量值
修改普通变量为只读变量: readonly 变量名
[root@cent1 test]# name = "张三"
bash: name: command not found...
[root@cent1 test]# name="张三"
[root@cent1 test]# echo name
name
[root@cent1 test]# echo $name
张三
[root@cent1 test]# echo $name
张三
[root@cent1 test]# echo $name666
[root@cent1 test]# echo ${name}666
张三666
[root@cent1 test]# unset name
[root@cent1 test]# echo ${name}666
666
[root@cent1 test]# echo ${name}
[root@cent1 test]# readonly age=18
[root@cent1 test]# echo $age
18
[root@cent1 test]# unset age
-bash: unset: age: cannot unset: readonly variable
[root@cent1 ~]# exit
logout
Last login: Sat Mar 18 09:03:37 2023 from 192.168.88.1
[root@cent1 ~]# echo $age
环境变量:是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。
注意: 环境变量的名字习惯上使用大写字母
查看系统记录的环境变量: env
常见的环境变量: HOSTNAME SHELL USER PATH ...
自定义环境变量格式: export 变量名=变量值
临时设置: 直接命令形式编写 注意:窗口关闭就是失效
永久设置: 在/etc/profile文件中编写 注意: 编写重新登录生效或者source /etc/profile
我们可以在执行 Shell 脚本时,向脚本传递参数,这时候可以使用特殊变量来获取参数
在执行Shell程序脚本时,可以向shell脚本动态传递参数。好处是某些配置属性不用写死在脚本中。
动态传递参数的方式: sh shell脚本文件 参数1 参数2 ...
Shell常用的特殊变量在shell脚本内部支持接收参数并使用:
$0: 获取当前脚本文件的名称
$n: 根据数字顺序获取对应的参数 注意:n代表1,2,3,4,5...
$#: 获取参数的总个数
$*: 获取所有的参数内容
在 Bash中,变量的默认数据类型都是字符串型
定义字符串: 变量名=值 变量名='值' 变量名="值"
建议: 使用双引号定义字符串,因为单引号括起来内容都是普通字符,双引号括起来的内容会识别特殊含义比如:$和``
#!bin/bash
echo "脚本文件名是$0"
echo "传入的参数个数是:$#"
echo "传入的第一个参数是:$1"
echo "传入的第二个参数是:$2"
echo "传入的第三个参数是:$3"
~
name=xxx
age=xxx
gender=xxx
[root@cent1 ~]# echo '我的名字是${name} 年龄是${age} 性别是${gender}'
我的名字是${name} 年龄是${age} 性别是${gender}
#!/bin/bash
DT=`date -d '-1day' +%Y-%m-%d`
d=`date +%a`
d1=`date`
d2=`date +%W`
echo --
echo '现在是:'${d1}
echo '今天的日期减一天的结果是:'${DT}
echo '今天是星期'${d}
echo '今天是今年的第'${d2}'周'
echo --
shell命令、shell脚本:本质上都是属于shell编程;
shell命令:倾向于在linux命令行中使用,适合逻辑简单场景;
shell脚本:倾向于在脚本文件中编写,适合复杂逻辑处理。
注意: 1.shell脚本文件一般以.sh结尾 2.文件第一行一般为#!/bin/bash
添加执行权限: chmod +x 脚本名
ll查看权限
shell脚本的执行方式:
方式一:sh在相对路径中执行
格式: sh 脚本名字
注意: 需要进入脚本的所在工作目录,然后使用对应的sh命令来执行脚本,
这种执行方式,脚本文件不需要具有可执行权限。
方式二:相对路径执行
格式: ./脚本名字
注意: 需要先进入到脚本所在的目录,然后使用 ./脚本方式执行,
这种执行方式,必须保证脚本文件具有可执行权限。
方式三:绝对路径执行
格式: /绝对路径/脚本
注意: 需要使用脚本的绝对路径中执行,指的是直接从根目录/到脚本目录的绝对路径,
这种执行方式,必须保证脚本文件具有可执行权限。
shell脚本也可以动态传参: sh 脚本 参数1 参数2 ... 注意: 脚本内部可以使用特殊变量获取
1.if语句
# 脚本内容age.sh【使用位置参数】 #!/bin/bash if [ $1 -gt 18 ]; then echo "你是个成年人" else echo "你还未成年" fi # 脚本调用 sh age.sh 输入的参数
2.循环语句
使用
for
和while
语句来实现循环,例如# for语句 for i in 1 2 3 4 5; do echo $i done # while语句【使用了变量】 i=0 while [ $i -lt 10 ]; do echo $i i=$((i+1)) done
3.输入输出
使用
echo
命令输出文本,使用read
命令读取用户输入,例如:# read 命令会等待输入 echo "What's your name?" read name echo "Hello, $name!"
4.命令执行
打印变量
today=`date +%Y-%m-%d` echo "Today is $today"
5.运算符
# 算术运算 num=$((1+2)) echo $num # 字符串运算 if [ "$name" == "John" ]; then echo "Hello, John!" fi # 逻辑运算 if [ $age -gt 18 ] && [ $gender == "male" ]; then echo "You are a man." fi