一、shell编程-变量
1. 前言
什么是shell
shell是应用程序,是壳,是命令解释器。
shell语言的特点
shell语言是指nuix操作系统的命令语言,同时又是该命令语言的监视程序的简称。
shell本身是一个用c语言编写的程序,它是用户使用unix/linux的桥梁,用户的大部分工作都是通过shell完成的。
shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令。
作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具备的控制结构,包括循环和分支。
它虽然不是nuix/Linux系统内核的已不复,但它调用了系统核心的大部分功能来执行程序。
建立文件并以并行的方式协调各个程序的运行。
因此对用户来说,shell是最重要的实用程序。
深入了解和熟练掌握shell的特性极其使用方法,是用好nuix/Linux系统的关键。
执行shell的多种方式
bash file1 子shell
sh file1 就是bash的简写 子shell
. file1 等于双击程序 本shell
source file1 本shell
子shell就是在shell中运行shell,套娃。
准备环境
vim bash.sh
#!/bin/bash
cd /home/
ls
bash bash.sh
. bash.sh
shell解释器在哪
cat /etc/shells
chsh -l
2.简介
shell变量,用一个固定的字符串去表示不固定的内容,便于修改。
3.自定义变量
用户自定义变量是最常用的变量类型,其特点是变量名和变量值都是由用户自定义的。
定义变量
变量名=变量值
name="zhangsan"
变量调用
当我们需要提取变量中的内容时,需要在变量名之前加入"$"符号,最简单的变量调用就是用过echo命令输出变量的值
echo $name
自定义变量要求
变量名不能以数字开头 1name=123 错
等号左右两侧不能有空格 name = 123 错
变量的值如果有空格,必须用引号包含 name=1 234 错
重复定义变量
——————————————————
name=zhangsan
name=lisi
echo $name
——————————————————
——————————————————
在进行变量叠加时,变量名需要用双引号或${}包含。
变量查看set
xingming=zhangsan666
set | grep xingming
变量删除unset
unset 变量名
unset xingming
使用变量前
编写脚本
vim ping.sh
#!/bin/bash
ping -c 1 192.168.56.1 &> /dev/null && echo 192.168.56.1up || echo 192.168.56.1down
:wq
&&是如果成功执行后面命令,||是如果失败执行后面命令
chmod +x ping.sh
./ping.ch
使用变量后
交互式定义变量
read从键盘读入变量值
read 变量名
read -p 变量名 先打印一句话,再等用户输入
结合上面的ping.sh
三种引号
定义或引用变量时要注意的
" " 弱引号 让空格失去了分割的作用变为普通空格
' ' 强引号 让一切符号失去作用
` ` 里面的命令优先执行
命名规则
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
中间不能有空格,可以使用下划线_
不能使用标点符号
不能使用bash里的关键字(可用help命令查看保留关键字)
4.整数运算
方法一
语法
expr 1 + 2
expr $num1 + $num2
需求
运动员的成绩总分
案例
制作脚本
vim avg3.sh
#!/bin/bash
read -p "请输入您的第一门成绩:" num1
read -p "请输入您的第二门成绩:" num1
echo -n "总成绩是:"
expr $num1 + $num2
:wq
chmod +x avg3.sh
. avg3.sh
方法二
语法
$(())
案例
方法三
语法
$[]
案例
方法四
语法
let
案例
5.小数运算(了解)
bc运算器
bc:交互运算器
scale=2 保留小数点后面两位
6.环境变量(了解)
全局变量和局部变量
声明全局变量
export 变量名 不加$
变量范围:在当前shell和子shell有效
想要使变量在当前用户登录后一直生效,可以将变量放到~/.bash_profile
vim ~/.bash_profile
export qqwee=123456
:wq
证明
注销登录,重新登陆服务器
想使变量在所有用户登录后一直生效,可以将变量放在/etc/profile
7.位置变量(了解)
位置变量语法
命令 参数1 参数2参数3...参数9以后特殊定义
$0 $1 $2 $3...$9
案例
预定义变量
$0 脚本名/程序名
$* 所有的参数
$# 参数的个数
例题
编写自动创建用户并设置初始密码的脚本
--stdin是标准输入,既读取输入命令,再执行。
这里写成echo "$pass" | passwd $user --stdin &> /dev/null 会好理解一点