一) bash shell shell执行三种方式 sh foo.sh source foo.sh ./foo.sh ## 需要文件有执行权限 chmod ug+x foo.sh 1.2) 重定向与管道符 | 管道符 > 输出重定向 ## 清空重定向。 如果文件不存在 则创建文件。如果文件有内容 则清空内容。 >> ## 追加重定向 几个特殊的文件 [root@mydnsserver]~# ls /dev/std* -l lrwxrwxrwx 1 root root 15 9月 15 08:37 /dev/stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 9月 15 08:37 /dev/stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 9月 15 08:37 /dev/stdout -> /proc/self/fd/1 file descriptor 文件描述符 /dev/stdin 标准输入 /dev/stdout 标准输出 ##默认打印在屏幕上。 /dev/stderr 标准错误 标准错误 举例 如 alice 用户 ls /root 用户 ls /root2345 不存在的目录 标准输入 举例 chpasswd < userlist.txt [root@mydnsserver]~# cat userlist.txt root:INSERT123.com ### sfdisk < 举例 [alice@mydnsserver ~]$ cat list-file.sh #!/bin/bash ls /root [alice@mydnsserver ~]$ bash list-file.sh ls: 无法打开目录/root: 权限不够 [alice@mydnsserver ~]$ bash list-file.sh 2> aa.log 举例 标准错误 标准输出,二者同时重定向到 一个文件。 ##注意 &> 表示 标准错误和标准输出 同时重定向 [alice@mydnsserver ~]$ cat list-file.sh #!/bin/bash ls /tmp ## 标准输出 ls /root ## 标准错误 [alice@mydnsserver ~]$ bash list-file.sh &> aa.log [alice@mydnsserver ~]$ bash list-file.sh &> /dev/null ## /dev/null 特殊的设备,黑洞设备 1.3) tee 命令 ## 一式二份,一份打印在屏幕上,一份重定向到aa.log -a append bash list-file.sh 2>&1 | tee -a aa.log 创建文件的几种方式总结 touch foo vi /etc/foo/bar.txt ## bar.txt 的父目录存在. :wq echo '123456' > foo > bar cat 可以创建文件.本质也是借助 >重定向 。写在shell脚本内比较多 tee 可以他那文件本质也是借助 >重定向 。 写在shell脚本内比较多 举例: echo $? 查询上一条命令是否执行成功。如果成功则返回0 不成功则返回非0. [alice@mydnsserver ~]$ echo $? 0 [alice@mydnsserver ~]$ ls /root/ ls: 无法打开目录/root/: 权限不够 [alice@mydnsserver ~]$ echo $? 2 [alice@mydnsserver ~]$ 1.4) ## 可以适应任何 特殊字符。 注意,结尾 不要写 'EOF' tee >> example.txt <<'EOF' $2023000 $2024111 2025222some single not ` \\some special some`here` EOF ## tee 可以改为cat , >> 可以改为 > cat > example5.txt <<'EOF' $2023000 $2024111 " " 2025222some " db=`cat /etc/hosts` single not ` \\some special some`here` EOF 1.5)管道符 windows 和 linux netstat 命令,及管道符 netstat -ant | findstr /I listen |findstr 3389 netstat -tunlp |grep -i listen | grep 22 2) 变量 自定义变量 环境变量 ## 查询命令 env #env=environment 位置变量 预定变量 3) shell脚本 与 定时计划任务 ## 下面二个,写法,同等效果,都是 把标准错误 标准输出 丢到 /dev/null [root@localhost ~] ] crontab crontab -e-e 1414 0 23 * * * source /root/df.sh &> /dev/null 0 23 * * * source /root/df.sh >/dev/null 2>&1