一、几个特殊字符参数
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
二、其他相关
单引号和双引号的区别:
单引号 ’ ':禁用扩展,即便 $ 也视为普通字符,可以说是所见即所得,即将单号引号的内容原样输出
双引号 " ":允许扩展,以 $ 引用其他变量,把双引号的内容输出出来,如果内容中有命令、变量等,会先把变量、命令解析出结果,然后再输出最终内容来
反撇号 ``:将命令的执行输出作为变量值,可 用$() 代替
无引号:把内容输出出来,会将含有空格的字符串视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出结果,然后再输出内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字
& && | || 的区别
& Linux后台运行符号
| Linux管道符,将前面内容传递到后面
&& 前面执行成功,则执行后面的
|| 前面执行失败,执行后面的
字符串比较
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否和str2小
str1 > str2 检查str1是否和str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0
整数值比较
-eq 等于(Equal)
-ne 不等于(Not Equal)
-ge 大于或等于(Greater or Equal)
-le 小于或等于(Lesser or Equal)
-gt 大于(Greater Than)
-lt 小于(Lesser Than)
常见的中断及退出控制指令
break:跳出当前所在的循环体,执行循环体后的语句。
continue:跳过循环体内余下的语句,重新判断条件以便执行下一次循环。exit:退出脚本,默认返回值是 0。
return:用在函数里 指定返回值。
shift:用于迁移位置变量,将 $1~$9 依次向左顺序移动。
0、1>、2>、>、2>&1、&>/dev/null 分别代表什么意思
0 表示标准输入
1>表示标准输出
2>表示标准错误输出
> 默认为标准输出重定向,与 1> 相同
2>&1 意思是把 标准错误输出 重定向到 标准输出.
&>/dev/null 意思是把 标准输出 和 标准错误输出 都重定向到空
三、样例
根据文件内容创建用户密码。文件格式为 test test01
思路
1 判断用户是否为root,echo $UID ,root账户为0,其余非0
2 按行读取文件,while read line 模式
3 判断用户是否存在,id user
4 非交互式创建用户名及密码 echo ****** | passwd user --stdin
#!/bin/bash
[$UID -ne 0] && exit 1
while read i
do
user=`echo $i |awk '{prnt $1}'`
pass=`echo $i |awk '{print $2}'`
id $user || useradd $user 2&1>/dev/null
echo $pass |passwd $user --stdin
done < test.list