Linux命令
权限相关常用
- chown:修改组
-
处理目录的常用命令
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.htmlSHELL
变量
定义变量
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}
**
如果不给skill变量加花括号,写成echo “I am good at $skillScript”,解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。for skill in Ada Coffe Action Java; doecho "I am good at ${skill}Script"done
删除变量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
注意:index从0开始string="runoob is a great site"echo ${string:1:4} # 输出 unoo
字符串查找
查找字符 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 "$*"; doecho $idone# 返回 1 2 3echo "-- \$@ 演示 ---"for i in "$@"; doecho $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" 姓名 性别 体重kgprintf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543printf "%-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]thenecho '两个数相等!'elseecho '两个数不相等!'fi
输出结果
两个数相等!
流程控制
IF
# 标准形式if conditionthencommand1...commandNfi# 单行形式,语句之间要加;if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
# if elseif conditionthencommand1...commandNelsecommandfi
# if else-if elseif condition1thencommand1elif condition2thencommand2elsecommandNfi
# demoa=10b=20if [ $a == $b ]thenecho "a 等于 b"elif [ $a -gt $b ]thenecho "a 大于 b"elif [ $a -lt $b ]thenecho "a 小于 b"elseecho "没有符合的条件"fi# 输出:a 小于 b
# 结合testnum1=$[2*3]num2=$[1+5]if test $[num1] -eq $[num2]thenecho '两个数字相等!'elseecho '两个数字不相等!'fi
FOR
# 多行模式for var in item1 item2 ... itemNdocommand1command2...commandNdone# 单行模式for var in item1 item2 ... itemN; do command1; command2… done;
# demofor loop in 1 2 3 4 5doecho "The value is: $loop"done
CASE
取值后面必须为单词in,每一模式必须以**右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;**。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
case 值 in模式1)command1command2command3;;模式2)command1command2;;*)command1command2;;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 aNumecho "输入第二个数字: "read anotherNumecho "两个数字分别为 $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


