source xx.sh
sh xx.sh
bash xx.sh
./xx.sh
grep "/bin/bash$" /etc/passwd | awk (-F:) '{print $1,$7}'
awk是进一步过滤
>会覆盖
>>附加
引用变量值:在变量名称前添加”$”
当变量名称容易和紧跟其后其他字符相混淆时,需要添加”{}”将其括起来
“”起界定字符串的作用
反撇号:ls -lh `which tar`
read -p "请输入想要安装的软件:" b//把输入的值赋予b
export //转化为全局变量
expr //进行整数之间的运算
运算符 | 意义 |
---|---|
++ -- | 增加及减少,可前置也可放到结尾 |
* / % | 乘法、除法、取余 |
+ - | 加法、减法 |
< <= > >= | 比较符号 |
== != | 等于与不等于 |
& | 位的与 |
^ | 位的异或 |
| | 位的或 |
&& | 逻辑的与 |
|| | 逻辑的或 |
?: | 条件表达式 |
= += -= *= /= %= &= ^= <<= >>= |= | 赋值运算符a+=相当于a=a+1 |
set 查看定义的变量
unset Serversion 取消变量
readonly 变量名 设置只读变量,unset不能删除只读变量
echo $PATH//环境变量
~/.bash_profile//用户变量
#!/bin/bash
SUM=`expr $1 + $2`
echo "$1+$2"= $SUM
# chmod +x addr2num.sh
# ./addr2num.sh 15 20
15 + 20= 35
$#:表示命令行中位置参数的个数
$*:表示所有位置参数的内容
$?:表示前一条命令执行后的返回状态,返回值为0表示正确执行,返回值为1表示执行异常
$0:表示当前执行的脚本或程序名称
#!/bin/bash
T=`date "+%Y%m%d-%H%M"`
TARFILE=beifen-${T}.tgz
tar zcf $TARFILE $* &>/dev/null
echo "已执行$0脚本"
echo "共完成$#个对象的备份"
echo "具体内容包括:$*"
chmod +x mybak.sh
# ./mybak.sh /boot/grub /mnt/public /root/aa
已执行./mybak.sh脚本
共完成1个对象的备份
具体内容包括:/boot/grub
-d 测试是否为目录(Directory)
-e 测试目录或文件是否存在(Exist)
-f 测试是否为文件(File)
-r 测试当前用户是否有权限读取(Read)
-w 测试当前用户是否有权限写入(Write)
-x 测试是否设置有可执行(Excute)权限
判断/mnt/cdrom目录是否存在?
# test -e /mnt/cdrom
# echo $?
[ 条件表达式 ]或[ [条件表达式] ]进行条件测试
-nt 判断文件A是否比文件B新
-ot 判断文件A是否比文件B旧
-ef 判断两个文件是否为同一个文件,用来判断两个文件是否指向同一个inode
-eq a等于b
-ne a不等于b
-gt a大于b
-lt a小于b
-le a小于或等于b
-ge a大于或等于b
判断当前可用空闲内存(free)大小
= 第一个字符串与第二个字符串相同
!= 第一个字符串与第二个字符串不相同
-z 检查字符串为空(zero),对于未定义或赋予空值的变量将视为空串
&& 逻辑与
|| 逻辑或
! 逻辑否
if 条件测试语句
then
命令序列
fi
双分支
if 条件测试语句
then
命令序列1
else
命令序列2
fi
多分支
if 条件测试操作1
then
命令序列1
elif 条件测试操作2
then
命令序列2
eles
命令序列3
fi
原文:https://www.cnblogs.com/wxj1711652908/p/12381486.html