while循环:read可以导入
#!/bin/bash
#name sex age是变量 用来存放stu.txt文件里一行的数据并且一一对应
while read name sex age
do
echo "姓名是$name 性别是$sex 年龄是$age"
done <stu.txt
#!/bin/bash
#name sex age是变量 用来存放stu.txt文件里一行的数据并且一一对应
while read name sex age
do
if (($age>19));then
#shell里面必须要双圆括号 以表示数值运算
echo "大于19岁的人的姓名是$name 性别是$sex 年龄是$age"
else
echo "小于19岁的人的姓名是$name 性别是$sex 年龄是$age"
fi
done <stu.txt
read 接受用户在终端里输入的内容 然后赋值给对应的变量(类似python的input)
可以在脚本里执行的时候 往脚本里输入内容
-p “提示字符串” 提示
Shell编程:
; 命令连接符号,用来在一行里输入多个命令 /8
判断
if:
- 单分支:就是一种情况
两种写法
if 条件 ;then
命令
fi
if 条件
then
命令
fi
条件成立就执行命令 如果条件不成立就不执行命令
条件是一个命令也可以是一个表达式(公式)
- 双分支—》就是两种情况
命令1
else
命令2
fi
- 多分支:多种情况
if 条件;then
命令1
elif
命令2
else
命令3
fi
shell编程中
(()):双圆括号主要用于整数的计算和比较
((数值的计算和比较实用的))
&& :与符号 表示两边的条件都要满足,都要执行成功
/dev/null --》Linux里叫null设备文件(空设备文件) 左右:任何内容重定向到此文件都会消失,不保存
因为脚本在执行的过程中有些内容,不想看到不想保存去浪费磁盘的空间 于是我们可以重定向到/dev/null文件里 重定向到/dev/null不会影响到命令的返回值
$? 代表上一条命令执行的返回值
0 说明上一条命令执行成功
非0 说明上一条命令执行不成功 (1(命令正确,但有可能参数或者选项不对),9 (命令正确,但有可能参数或者选项不对),127(命令打错了不存在)等等)
$$ 查看当前终端对于bash的进程号
返回值和输出结果是两个概念!!!
返回值是命令完成后给bash的 返回值的范围是0-255
具体每个命令出错的返回值是多少要看相关命令的创作者的执行文件
若shell脚本不给返回值 运行成功默认返回值就是0
输出结果是命令执行过程中输出到屏幕上的 给人看的
exit 123: exit用来推出脚本 返回一个123的值 返回值就变成123
id 用户名:判断用户是否存在
if 只认 0 和 非0
所以if 会自动的去获取后面命令的返回值 如果返回值为0 if就认为命令执行成功 否则就认为命令执行不成功
if 0(shell会默认把0当作一个命令)
$是引用输出结果 而不是引用返回值
管道符号只是将命令1 的正确输出送给命令2 错误的不送
若一定要把错误的一起送到命令2 则需要在管道符号前面加 2>&1
如 lsls 2>&1 |grep ls
<< 输入重定向 一般用于shell脚本
生成文件以及输入文件内容 以EOF结束 :cat >文件 <<EOF
判断文件是否存在但不想看输出: stat 文件名 &>/dev/null
Shell脚本里的字符串的比较是双中括号[[ 里面可以加&& ]]
如 if [[ $u_name==$username && $u_passwd==$passwd ]];then
根据name.txt文件批量创建用户名并设置密码?
需求分析:
while read name passwd
do
useradd $name
echo $passwd |passwd $name –stdin
done < name.txt
需要对用户进行判断 如果存在就不新建 不存在就新建 如果存在,密码还是要修改的