SHELL 您所在的位置:网站首页 sed输出指定行 SHELL

SHELL

2023-03-18 18:04| 来源: 网络整理| 查看: 265

Linux命令权限相关常用处理目录的常用命令磁盘相关命令VIM编辑SHELL变量字符串数组传参算数运算符关系运算符布尔运算符逻辑运算符字符串运算符文件测试运算符流程控制IFFORCASE函数输出/输入

Linux命令

权限相关常用 chown:修改组

chmod:修改权限

处理目录的常用命令

ls(英文全拼:list files): 列出目录及文件名

只列出来文件夹:ls -F |grep "/$"

cd(英文全拼:change directory):切换目录

pwd(英文全拼:print work directory):显示目前的目录mkdir(英文全拼:make directory):创建一个新的目录rmdir(英文全拼:remove directory):删除一个空的目录cp(英文全拼:copy file): 复制文件或目录rm(英文全拼:remove): 移除文件或目录

mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称

磁盘相关命令

df:列出文件系统的整体磁盘使用量

df [-ahikHTm] [目录或文件名]du:检查磁盘空间使用量

du [-ahskm] [文件或目录名称]

$ du -h -d1# 查看当前目录的大小,只看一级,d后面如果是2就看二级,-h 提高可读性(以K/M/G)为单位

VIM编辑

最常见的i:开始输入字符:wq! 强制保存并退出编辑:set nu 展示行号批量替换::100,200s/vbird/VBIRD/g :100~200行中间所有的vbird替换为VBIRD:1,$s/word1/word2/g: 从第一行到最后所有的vbird替换为VBIRD其他命令参考https://www.runoob.com/linux/linux-vim.html

SHELL

最常见的头: #!/bin/bash

变量

定义变量

your_name="dachun.wang"

注意点:变量名和等号之间不能有空格

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

中间不能有空格,可以使用下划线(_)。不能使用标点符号。不能使用bash里的关键字(可用help命令查看保留关键字)。除了显式地直接赋值,还可以用语句给变量赋值,如:# 打印etc目录下所有文件的文件名for file in `ls /etc` then; do echo $file; done#或for file in $(ls /etc) then; do echo $file; done 使用变量使用一个定义过的变量,只要在变量名前面加美元符号即可echo $your_name#或者echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界**for skill in Ada Coffe Action Java; doecho "I am good at ${skill}Script"done 如果不给skill变量加花括号,写成echo “I am good at $skillScript”,解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。删除变量unset variable_name 字符串字符串可以用单引号,也可以用双引号**str='this is a string'str="this is a string" 单引号字符串的限制: 单引号里的任何字符都会原样输出,**单引号字符串中的变量是无效**的;

双引号的优点:

双引号里可以有变量双引号里可以出现转义字符your_name="abc"# 使用双引号拼接greeting="hello, "$your_name" !"greeting_1="hello, ${your_name} !"echo $greeting $greeting_1# 使用单引号拼接greeting_2='hello, '$your_name' !'greeting_3='hello, ${your_name} !'echo $greeting_2 $greeting_3 输出:hello, runoob ! hello, runoob !hello, runoob ! hello, ${your_name} !获取字符串长度string="abcd"echo ${#string} #输出 4 字符串截取string="runoob is a great site"echo ${string:1:4} # 输出 unoo 注意:index从0开始

字符串查找查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):

string="runoob is a great site"echo `expr index "$string" io` # 输出 4

数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

#方式1array_name=(value0 value1 value2 value3)#方式2array_name[0]=value0array_name[1]=value1array_name[n]=valuen

读取数组

# ${数组名[下标]}echo ${array_name[0]} #输出value0# 不带坐标,返回第0个echo ${array_name} #输出value0# 输出所有元素echo ${array_name[@]} #输出value0 value1 value2 value3# 查询数组长度echo ${#array_name[@]} 输出4

注意:数组必须带{},否则识别不了

echo $array_name[0] #输出 value0[0]

传参#!/bin/bash# author:菜鸟教程# url:www.runoob.comecho "Shell 传递参数实例!"echo "执行的文件名:$0"echo "第一个参数为:$1"echo "第二个参数为:$2"echo "第三个参数为:$3"echo "参数个数为:$#"

输出

$ chmod +x test.sh $ ./test.sh 1 2 3Shell 传递参数实例!执行的文件名:./test.sh第一个参数为:1第二个参数为:2第三个参数为:3参数个数为:3

$? 代表脚本是否正确执行,可用于做逻辑判断$ 和 $@的区别:$是一个参数。¥@是每个参数

echo "-- \$* 演示 ---"for i in "$*"; do echo $idone# 返回 1 2 3echo "-- \$@ 演示 ---"for i in "$@"; do echo $idone# 返回# 1# 2# 3

算数运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

$ echo 2+2#输出:2+2$ echo `expr 2+2`#输出:2+2$ echo `expr 2 + 2`#输出:4$ expr 2 + 2#输出:4

expr

仅对整数有效表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样

算数运算符

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

布尔运算符

返回

逻辑运算符

字符串运算符

文件测试运算符 操作符 说明 举例 -b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。 -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。 -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。 -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。 -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。 -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。 -p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。 -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。 -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。 -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。 -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。 -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。 -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

echo:支持变量、转义字符、支持输出字符到其他文件

#!/bin/sh# -e 开启转义echo -e "OK! \n" echo "It is a test"# -e 开启转义 \c 不换行echo -e "OK! \c" # echo "It is a test"#字符输出到myfile中echo "It is a test" > myfile #显示命令执行结果echo `date`

printf: printf format-string [arguments…]

#!/bin/bash# author:菜鸟教程# url:www.runoob.comprintf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

结果说明:

%s %c %d %f都是格式替代符%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。%-4.2f 指格式化为小数,其中.2指保留2位小数。

注意:printf 不会自带换行printf 单引号也会被替换printf 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替printf 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用

printf "%s and %d \n" # 返回 and 0printf %s abc def# 返回abcdef

test:Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

num1=100num2=100if test $[num1] -eq $[num2]then echo '两个数相等!'else echo '两个数不相等!'fi

输出结果

两个数相等!

流程控制

IF# 标准形式if conditionthen command1 ... commandN fi# 单行形式,语句之间要加;if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi # if elseif conditionthen command1 ... commandNelse commandfi # if else-if elseif condition1then command1elif condition2 then command2else commandNfi # demo a=10b=20if [ $a == $b ]then echo "a 等于 b"elif [ $a -gt $b ]then echo "a 大于 b"elif [ $a -lt $b ]then echo "a 小于 b"else echo "没有符合的条件"fi# 输出:a 小于 b # 结合testnum1=$[2*3]num2=$[1+5]if test $[num1] -eq $[num2]then echo '两个数字相等!'else echo '两个数字不相等!'fi

FOR# 多行模式for var in item1 item2 ... itemNdo command1 command2 ... commandNdone# 单行模式for var in item1 item2 ... itemN; do command1; command2… done; # demofor loop in 1 2 3 4 5do echo "The value is: $loop"done

CASE

取值后面必须为单词in,每一模式必须以**右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;**。取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

case 值 in模式1) command1 command2 command3 ;;模式2) command1 command2 ;;*) command1 command2 ;;esac #!/bin/shsite="runoob"case "$site" in "runoob") echo "菜鸟教程" ;; "google") echo "Google 搜索" ;; "taobao") echo "淘宝网" ;;esac

其他流程还有 while | until,一般都可以用for循环替代。循环停止语句 break | continue ,和其他语言的概念无区别

函数

无参数,无返回值

#!/bin/bashdemoFun(){ echo "这是我的第一个 shell 函数!"}echo "-----函数开始执行-----"demoFunecho "-----函数执行完毕-----"

带返回值函数

#!/bin/bashfunWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return `expr $aNum + $anotherNum`}funWithReturnecho "输入的两个数字之和为 $? !"

参数传递

#!/bin/bashfunWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !"}funWithParam 1 2 3 4 5 6 7 8 9 34 73

输出/输入 command > file 将输出重定向到 file。command < file 将输入重定向到 file。command >> file 将输出以追加的方式重定向到 file。

基本功能参考:https://www.runoob.com/linux/linux-tutorial.html各种括号、引号使用的参考:https://blog.csdn.net/taiyang1987912/article/details/39551385



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有