执行shell文件的方式
source xx.sh sh xx.sh bash xx.sh ./xx.sh
管道与重定向
grep "/bin/bash$" /etc/passwd | awk (-F:) '{print $1,$7}' awk是进一步过滤 >会覆盖 >>附加shell脚本变量
引用变量值:在变量名称前添加”$” 当变量名称容易和紧跟其后其他字符相混淆时,需要添加”{}”将其括起来 “”起界定字符串的作用 反撇号: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语句结构
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