一:shell脚本的基础
1:执行脚本的4种方式
1)相对路径执行
就是./脚本的路径,就是要在脚本的当前路径下执行
缺点:一但不在脚本的目录下的话,就执行不了,需要可执行权限
2)绝对路径执行
/脚本的路径,需要可执行权限
3)bash 执行
bash 脚本路径,不需要可执行权限
前面三种都是在子shell中执行的,如果定义了变量,在当前shell中执行不了
4)source 执行
source 脚本路径,不需要可执行权限,在当前shell中执行
2:规范性
1)尽量第一行写用什么shell #! /bin/bash
2)注释,写描述信息
3)代码尽量有层次性
4)shell脚本中尽量以.sh结尾。但实际上后缀不影响
5)避免过多的代码,能一次写完就不要写多次,少用cat命令
3:位置变量
1:常用的
${1-9} | 代表着输入1到9个参数 |
${10} | 10以上的要用大括号 |
$0 | 打印出自己的文件名 |
$$ | 输出执行脚本的pid |
$@ | 代表着所有的参数 |
$* | 代表着所有的参数 |
$? | 代表着返回上一次命令的正确与否 |
$# | 代表着输入参数的总个数 |
2:案例
1)$@和$?的区别
带上双引号的话
$@:就是每个参数都是一个个体
$*:就代表着输入的参数都是一个整体
$@ [root@server opt]# cat test.sh #!/bin/bash touch "$@" [root@server opt]# [root@server opt]# bash test.sh 1 2 3 [root@server opt]# ls 1 2 3 test.sh $* [root@server opt]# cat test.sh #!/bin/bash touch "$*" [root@server opt]# bash test.sh 1 2 3 [root@server opt]# ls 1 '1 2 3' 2 3 test.sh
2)$0和$#
[root@server opt]# cat test.sh #!/bin/bash touch $1 touch $2 echo "文件输入的参数总共为:$#" echo "文件的名字叫:$0" [root@server opt]# [root@server opt]# bash test.sh 1 2 文件输入的参数总共为:2 文件的名字叫:test.sh
4:read命令
变量的输入,就是我不知道要添加参数,可以使用read命令来提示用户要输入参数
1:常用的选项
-p | 提示信息 |
-s | 暗文输入 |
-t | 超时时间 |
2:案例
1)创建用户的脚本文件
[root@server opt]# cat test.sh #!/bin/bash read -p "input your username:" user_name useradd $user_name read -s -p "input your password:" user_word echo "$user_word" | passwd --stdin $user_name &> /dev/null echo echo "$user_name is created" #脚本执行 [root@server opt]# source test.sh input your username:qqq input your password: qqq is created
二:shell中的符号
1:逻辑符号
&&:逻辑与,就是前面的命令正确的执行了,后面的命令才能执行,
|| :逻辑或,就是前面的命令正确的执行了,后面的命令就不能执行,只有一个能执行,另外一个不能执行
!:逻辑非,就是将真变成假的,假的变成真的
2:条件测试符号
1:test 条件表达式,在命令行中手动的测试
2:[ ] 2边都要有空格,可以使用 -a,-o,!这些
3:[ [ ] ] 2边都要有空格。可以使用逻辑与,逻辑或,逻辑非这些,支持正则表达式和通配符
3:逻辑运算符
-a | 逻辑与 | [ 命令1 -a 命令2 ] |
-o | 逻辑或 | [ 命令1 -o 命令2 ] |
! | 逻辑非 | [ ! 命令1 ] |
4:数值运算符
-eq | 2边相等,为真返回0 |
-ne | 2边不相等,为真返回0 |
-gt | 大于 |
-ge | 大于等于 |
-lt | 小于 |
-le | 小于等于 |
5:文件测试运算符
-f | 检查是否为文件,真,返回为0 |
-d | 检查是否为目录,真,返回为0 |
-e | 检查目录(文件)是否存在,真,返回为0 |
-s | 检查文件是否为空,不为空,返回为0 |
-w | 检查文件是否有写的权限 |
-b | 检查设备是否为块设备 |
6:字符串运算符
就是做字符串比较的
== | 检查2个字符串是否相等,一个=也行 |
!= | 检查2个字符串不相等 |
-z | 检查字符串的长度是否为0,为0则返货0 |
-n | 检查字符串的长度不为0,真,则返货0 |
str | 检查字符串是否为空, |
字符串比较的话,尽量带上双引号,比如-n这个选项,就要带上,不带上,就没有用了
总结:就是[ ]和 [[ ]]这个里面做的数值运算的话,就要使用le,lt什么的
()和(())用的数值运算就是数学中的符号
三:shell中的运算
1:$(())运算
+-*/,
[root@server opt]# a=100 [root@server opt]# b=20 [root@server opt]# echo $(($a+$b)) 120 [root@server opt]# echo $(($a-$b)) 80 [root@server opt]# echo $(($a*$b)) 2000 [root@server opt]# echo $(($a/$b)) 5 [root@server opt]#
2:$[ ]运算
[root@server opt]# a=100 [root@server opt]# b=20 [root@server opt]# echo $[$a+$b] 120 [root@server opt]# echo $[$a-$b] 80 [root@server opt]# echo $[$a*$b] 2000 [root@server opt]# echo $[$a/$b] 5
四:shell中的语句
1:if语句
标签:opt,shell,RHCE,server,第五,sh,test,echo,root From: https://www.cnblogs.com/qm77/p/17964052