当前目录 CURRENT_DIR=$(cd $(dirname $0); pwd) 或 CURRENT_DIR=$(cd `dirname $0`; pwd) dirname $0: 取得当前执行的脚本文件所在的目录; cd: 进入当前工作目录; pwd: 显示当前工作目录; 将当前工作目录输出给变量CURRENT_DIR。 上上级目录 `dirname $(dirname "$PWD")` $()与``作用一样,用于shell命令的执行。 dirname: 显示最后一个结点前的路径;相对的,basename: 显示最后一个结点的名称。 $0: 脚本的路径名称,包含脚本本身的名称。 进程休眠3s sleep 3s 睡眠3秒 sleep 3m 睡眠3分 sleep 3h 睡眠3小时
shell echo写入文件
echo aaa > ./a.log echo -e "第一行\n第二行\n" > demo.txt $ cat>a.log <<EOF > 第一行 > 第二行 > EOF <<EOF 表示遇EOF就结束
m1=`expr 7 % 3` 这里有三个空格,一个也不能少
文件是否存在 文件是否存在 if [ ! -f "./a.log" ];then echo "文件不存在" else echo "文件存在" fi 目录是否存在 if [ ! -d "/data/" ];then mkdir /data else echo "文件夹已经存在" fi #!/bin/bash if [ -f './a.sh' ]; then echo "./a.sh存在" fi if [ -f '../shell' ]; then echo "../shell存在" fi if [ -f '../.msg' ]; then echo "../.msg存在" fi -f 只能判断文件是否存在,不能判断目录 ./表示上级目录,也是父目录 ./a.sh表示当前父目录下的a.sh文件 ../表示上上级目录 文件判断 if [ -f file ] 如果文件存在 if [ -d … ] 如果目录存在 if [ -s file ] 如果文件存在且非空 if [ -r file ] 如果文件存在且可读 if [ -w file ] 如果文件存在且可写 if [ -x file ] 如果文件存在且可执行 整数比较 if [ int1 -eq int2 ] 如果int1等于int2 if [ int1 -ne int2 ] 如果不等于 if [ int1 -ge int2 ] 如果>= if [ int1 -gt int2 ] 如果> if [ int1 -le int2 ] 如果<= if [ int1 -lt int2 ] 如果< 字符串判断 If [ $a = $b ] 如果string1等于string2 字符串允许使用赋值号做等号 if [ $string1 != $string2 ] 如果string1不等于string2 #!/bin/bash string="" if [ $string ]; then echo "string 有字符" fi if [ -n $string ]; then echo "string 为空或不存在1" fi if [ -z $string ]; then echo "string 为空或不存在2" fi 输出: string 为空或不存在1 string 为空或不存在2 #!/bin/bash if [ $string ]; then echo "string 有字符" fi if [ -n $string ]; then echo "string 为空或不存在1" fi if [ -z $string ]; then echo "string 为空或不存在2" fi 输出: string 为空或不存在1 string 为空或不存在2 -a到-z [ -a FILE ] 如果 FILE 存在则为真。 [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。 [ -d FILE ] 如果 FILE 存在且是一个目录则为真。 [ -e FILE ] 如果 FILE 存在则为真。 [ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。 [ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。 [ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。 [ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。 [ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。 [ -r FILE ] 如果 FILE 存在且是可读的则为真。 [ -s FILE ] 如果 FILE 存在且大小不为0则为真。 [ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。 [ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。 [ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。 [ -x FILE ] 如果 FILE 存在且是可执行的则为真。 [ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。 [ -G FILE ] 如果 FILE 存在且属有效用户组则为真。 [ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。 [ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。 [ -S FILE ] 如果 FILE 存在且是一个套接字则为真。 [ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2,or 如果 FILE1 exists and FILE2 does not则为真。 [ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。 [ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。 [ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。 [ -z STRING ] “STRING” 的长度为零则为真。 |
分步执行,如果step=1,执行第一步,如果step=2,执行第2步 #!/bin/bash # 设置step的值,这里只是为了演示,你可以根据实际情况设置 # 例如,你可以通过命令行参数、环境变量或用户输入来设置这个值 step=1 # 你可以将这里的值更改为1或2来测试 # 检查step的值并执行相应的步骤 if [ $step -eq 1 ]; then echo "执行第一步" # 在这里插入你的第一步代码 # 例如: echo "这是第一步的具体操作" elif [ $step -eq 2 ]; then echo "执行第二步" # 在这里插入你的第二步代码 # 例如: echo "这是第二步的具体操作" else echo "无效的step值: $step" fi |
|
|
|
删除第1行 sed -i "1d" jupyter -i 表示保存 添加文本内文件的第1行 sed -i '1i添加的内容' filename # 在第一行前添加字符串 sed -i "1i#\!/ai/app/anaconda3/bin/python" jupyter [py39@pt1 tmp]$ cat jupyter #!/ai/app/anaconda3/bin/python # -*- coding: utf-8 -*- 全局替换 sed -i 's/ssid.*/ssid=6/g' test.sh
按大小拆分 split -b 5M file1 xaa xab 合并:要求写入的名称与原来拆分的原文件名称一致 cat x* > file1
split -b 180M jupyter.tar.gz vim readme.txt cat x* > jupyter.tar.gz
ubantu下压缩 tar -zcvf a.tar.gz a 压缩后,可能出现损失,如果很重要,或者要交给其他人处理,最后自己先解压一下试试 |
|
|
|
|
右键无法粘贴 右键无法粘贴,而是变成区域选择 解决办法 ~# vim .vimrc "设置鼠标可用 set mouse-=a 原来是set mouse=a 改为set mouse-=a |
|
|
|
|