>a.txt2>错误内容重定向lsc.txtlsc.txt>b.txt2>>错误内容追加&>正确信息和错误信" />

shell

您所在的位置:网站首页 shell编程判断文件是否存在数据库中 shell

shell

2023-05-18 19:10| 来源: 网络整理| 查看: 265

shell编程 sudo cat /etc/shells > >> 2> 2>> &> > 重定向 history > a.txt >> 追加 echo "我爱你" >> a.txt 2> 错误内容重定向 ls c.txt ls c.txt > b.txt 2>> 错误内容追加 &> 正确信息和错误信息同时导出 | 管道 修改shell环境 grep lhz /etc/passwd usermod -s /bin/tcsh lhz chsh -s /bin/bash lhz Linux pstree命令将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的行程。 pstree 变量 变量名=变量值 x=11 echo $x echo ${x} # 取消变量 unset x name="Shell" url="http://www.baidu.com/shell/" str1=$name$url #中间不能有空格 str2="$name $url" #如果被双引号包围,那么中间可以有空格 str3=$name": "$url #中间可以出现别的字符串 str4="$name: $url" #这样写也可以 str5="${name}Script: ${url}index.html" #这个时候需要给变量名加上大括号 echo $str1 echo $str2 echo $str3 echo $str4 echo $str5 echo $PATH echo $UID echo $HOME echo $PWD echo $SHELL echo $1 echo $2 echo $3 sh demo02.sh 1 2 3 预定义变量 变量名含义$0当前所在进程或脚本名$$当前运行经常的PID号$?命令执行后返回状态,0表示正常,1表示其他异常$#已加载的位置遍历的个数$*所有位置变量的值 引号的区别 双引号允许扩展,以$引用其他遍历单引号禁止扩展,$视为普通字符串反引号将命令的执行作为变量的值,$()与反引号等效 局部变量与全局变量

read 定义变量 read -p "请输入账号 >>> " account read -p "请输入密码 >>> " passwrod

# -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。 # -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。 # -p 后面跟提示信息,即在输入前打印提示信息。 # -e 在输入的时候可以使用命令补全功能。 # -n 后跟一个数字,定义输入文本的长度,很实用。 # -r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。 # -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。 # -t 后面跟秒数,定义输入字符的等待时间。 # -u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。 export 定义全局变量 运算符 数学运算符 echo $[5/2] echo $((5/2)) let i=1+1 echo ${i} echo "1.2+3.4" | bc echo "1.2+3.4;5.6+7.8" | bc echo "scale=2;10/5" | bc bc 比较运算符

表达式成立返回1

表达式不成立返回0

echo "5==2" | bc echo -e "\033[34mOK\033[0m" 条件测试 字符串比较 echo $TT [ -z $TT ] $? 如果字符串为空结果为0 如果字符串非空结果为1 判读系统用户是不是lhz [ $USER == lhz ] echo $? [ $USER != lhz ] echo $? 数字比较 操作符含义-eq等于(Equal)-ne不等于(Not Equal)-ge大于或等于(Greater or Equal)-le小于或等于(Less or Equal)-gt大于(Greater Than)-lt小于(Less Than) [ 3 -eq 3 ] echo $? whoami;显示的是当前用户下的用户名 who am i:显示的是登录时的用户名 who:显示当前真正登录系统中的用户(不会显示那些用su命令切换用户的登录者) [ $(whoami | wc -l) -gt 1 ] echo $? 文件状态测试 操作符含义-e判断对象是否存在(Exist),罗存在着结果为真-d判断对象是否为目录(Directory),是结果为真-f判断对象是否为文件(File),是结果为真-r判断对象是否有可读(Read)权限,有结果为真-w判断对象是否有可写(Write)权限,有结果为真-x判断对象是否有可执行(eXcute)权限,有结果为真 [ -d /home/lhz ] 控制操作符 操作符含义;按顺序执行不关心前一条命令执行是否成功&&当前一条命令执行成功后,执行后一条命令||二选一 ,如果前一个执行成功后一个不执行,如果前一个执行不成功则执行后一个 cd /etc ; ls cd /etc && ls cd /etc || ls [ $USER == "lhz" ] && echo Y || echo N # 解决 linux下编译运行.sh文件报错 “[: XXXX: unexpected operator” 问题 sudo dpkg-reconfigure dash 条件判断

与:-a,当指定多个条件时,默认为与关系

或:-o

非:!,这是个单目操作符

#!/bin/bash read -p "请输入账号 >>> " account read -p "请输入密码 >>> " password if [ ${account} == admin -a ${password} == 123456 ] then echo "欢迎李昊哲" else echo "账号或者密码错误" fi #!/bin/bash read -p "请输入账号 >>> " account read -p "请输入密码 >>> " password if [ ${account} == admin ] && [ ${password} == 123456 ] then echo "欢迎李昊哲" else echo "账号或者密码错误" fi 循环 for 变量 in 值列表 do 循环体 done for ((变量初始值;变量条件;变量变化)) do 循环体 done 数组 arr=(1 3 5 7 9) echo ${arr[1]} len=${#arr[@]} echo $len len=${#arr[*]} echo $len 函数 function 函数名{} 函数名(){} sed

Stream Editor

非交互式逐行处理可以对文本进行增、删、改、查等操作

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

语法

sed [-hnV][-e][-f][文本文件]

参数说明:

-e

动作说明:

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);直接修改源文件p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦! sed '2p' /etc/hosts sed -n '2p' /etc/hosts sed -n '6,7p' /etc/hosts cat /etc/network/interfaces

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

行处理 一次处理一行内容不改变文件内容 sed的使用方法

一.在命令行指定sed指令对文本进行处理:sed +选项 ‘指令’ 文件

二.先将sed指令保存到文件中,将该文件作为参数进行调用:sed +选项 -f 包含sed指令的文件 文件

语法 # 命令行格式 sed [option] [command] file # 脚本格式 sed -f scriptfile file 常用的option及含义 option含义-e 脚本命令该选项会将其后跟的脚本命令添加到已有的命令中。-f 脚本命令文件该选项会将其后文件中的脚本命令添加到已有的命令中。-n默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。-i此选项会直接修改源文件,要慎用。 常用的command及含义

行定位(正则)+ sed命令(操作)

command含义n1~512 之间的数字,表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 3 个 A,但只想替换第二个 A,就用到这个标记;g对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据有 3 个 A,则只会替换第一个 A;p会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。w file将缓冲区中的内容写到指定的 file 文件中;&用正则表达式匹配的内容进行替换;\n匹配第 n 个子串,该子串之前在 pattern 中用 () 指定。\转义(转义替换部分包含:&、\ 等)。 体验 sed p 打印脚本命令 sed --version more /etc/hosts sed '2p' /etc/hosts sed -n '2p' /etc/hosts sed -n '6,7p' /etc/hosts more /etc/passwd sed '3p' /etc/passwd sed -n /etc/passwd sed -n '3p' /etc/passwd free free | sed '/Mem/p' free | sed -n '/Mem/p' nl /etc/hosts | sed -n '2p' /etc/hosts nl /etc/hosts nl /etc/hosts | sed -n '2p' nl /etc/hosts | sed -n '2!p's sed -n '1~2p' /etc/hosts nl /etc/passwd | sed -n '1~2p' sed a 和 i 脚本命令 sed '1,3a +++++++++' note.txt sed '3a +++++++++' note.txt sed '1,3a +++++++++' note.txt sed '1,3i +++++++++' note.txt sed '$a address 127.0.0.1\nport 80' note.txt sed -i '$a address 127.0.0.1\nport 80' note.txt sed s 替换脚本命令 # s 是替代命令 # g -- 全部替代 # 无g -- 只替代每行第一个。 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ifconfig enp4s0f2 | sed -n '/inet /p' | sed 's/.*inet //' | sed 's/netm.*$//' sed c 替换脚本命令 sed '1,3c +++++++++' note.txt sed d 删除脚本命令 sed -i '$/d' note.txt sed '/^[ ]*$/d' note.txt sed '/^$/d' note.txt sed -i '/^[ ]*$/d' note.txt sed () [] {} # ()多个正则规则 sed 's/\(^[a-z_-]\+\):x:\([0-9]\+\):\([0-9]\+\):.*$/USER:\1\tUID:\2\tGID:\3/' /etc/passwd ifconfig enp4s0f2 | sed -n '/inet /p' | sed 's/.*inet \([0-9.]\+\) .*$/\1/' # {}里面可以放多条命令,用分号分开 wc -l /etc/passwd nl /etc/passwd | sed '{20,30d;s/nologin/haha/g}' sed n 跳行脚本命令 nl /etc/passwd | sed -n '{n;p}' nl /etc/passwd | sed -n '2~2p' nl /etc/passwd | sed -n '{p;n}' nl /etc/passwd | sed -n '1~2p' nl /etc/passwd | sed -n '{n;n;p}' nl /etc/passwd | sed -n '{p;n;n}' nl /etc/passwd | sed -n '1~3p' sed & 符号 echo "hello HELLO world WORLD"| sed 's/[a-z]/(&)/g' sed u l U L sed y 转换脚本命令 # y一般是行级别的替换,s一般是列级别替换(当然也可以转换成行级); # s替换的是整体,y替换的是每一字母对应的单个字母 # 把data中的所有行中的第一次出现dog的替换成cat,(注意:如果cat/后没有出现其他形式,则默认时第一次出现的位置) sed 's/dog/cat/' data # 把data中的第一行至第三行中的a替换成A,b替换成B,c替换成C sed '1,3y/abc/ABC/' data # 把data中的第二行至最后一行的第一次出现dog的替换成cat sed '2,${s/dog/cat/1}' data sed w 脚本命令 # 复制匹配行拷贝到指定文件 sed '2,4w 1.txt' a.txt sed r 脚本命令 # 复制指定文件插入到匹配行 sed '2r 1.txt' a.txt sed q 退出脚本命令 nl /etc/passwd | sed '10q' nl /etc/passwd | sed '/false/q' 案例 sed -n '/Exceptio/p' catalina.out sed -n '/Exceptio/p' catalina.out >> error.txt

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

和 sed 命令类似,awk 命令也是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;

反之,则不对行做任何处理。

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

语法 awk [选项参数] 'script' var=value file(s) 或 awk [选项参数] -f scriptfile var=value file(s) 常用的option及含义 option含义-F fs指定以 fs 作为输入行的分隔符,awk 命令默认分隔符为空格或制表符。-f file从脚本文件中读取 awk 脚本指令,以取代直接在命令行中输入指令。-v var=val在执行处理过程之前,设置一个变量 var,并给其设备初始值为 val。 awk 使用数据字段变量

awk 的主要特性之一是其处理文本文件中数据的能力,它会自动给一行中的每个数据元素分配一个变量。

默认情况下,awk 会将如下变量分配给它在文本行中发现的数据字段: $0 代表整个文本行; $1 代表文本行中的第 1 个数据字段; $2 代表文本行中的第 2 个数据字段; $n 代表文本行中的第 n 个数据字段。

awk -F ":" '{print $1}' /etc/passwd awk -F ":" '{print $1,$3,$4}' /etc/passwd awk -F ":" '{print $1"\t"$3"\t"$4}' /etc/passwd awk -F ":" '{print "USER:"$1"\t""UID:"$3"\t""GID:"$4}' /etc/passwd NR 每行的记录号 rowNF 字段数量变量 colFILENAME 正在处理的文件名 awk -F ":" '{print NR,NF}' /etc/passwd awk -F ":" '{print NR,NF,FILENAME}' /etc/passwd awk -F ":" '{print "ROW:"NR,"\t""COL:"NF,"\t""USER:"$1}' /etc/passwd awk -F ":" '{printf("ROW:%s""\t""COL:%s""\t""USER:%s""\n"),NR,NF,$1}' /etc/passwd 扩展格式 awk -F ":" 'BEGIN{print "ROW""\t""COL""\t""USER"}{print NR"\t"NF"\t"$1}END{print "------"FILENAME"------"}' /etc/passwd 逻辑判断 awk -F ":" '{if ($3>100) printf("ROW:%s""\t""COL:%s""\t""USER:%s""\n"),NR,NF,$1}' /etc/passwd awk -F ":" '$1~/l.*/{printf("ROW:%s""\t""COL:%s""\t""USER:%s""\n"),NR,NF,$1}' /etc/passwd awk -F ":" '$1~/^l.*/{printf("ROW:%s""\t""COL:%s""\t""USER:%s""\n"),NR,NF,$1}' /etc/passwd awk -F ":" '$1!~/^l.*/{printf("ROW:%s""\t""COL:%s""\t""USER:%s""\n"),NR,NF,$1}' /etc/passwd


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3