type -a 命令
可以查看某个shell命令的含义,对alias也适用
echo带颜色的文本
需要使用参数-e,格式为echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"
,比如"\033[45;5m 闪烁效果 \033[0m"
1
2
3
4
5
6echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
\033[5m
闪烁效果,这个以前不知道
1 | 字背景颜色范围: 40--49 字颜色: 30--39 |
对shell脚本进行语法检查
1 | bash -n script_name.sh // -n选项只做语法检查,而不执行脚本。 |
例如,检查结果可能是这样:1
2
3# bash -n t.sh
t.sh: line 6: syntax error in conditional expression: unexpected token `;'
t.sh: line 6: syntax error near `;'
连续执行命令
连续执行shell命令有三种情况:
- 用分号
;
间隔,会一直执行,无论命令对错。 echo abc; echo 123 - 用
&&
间隔,执行到错误命令会停止。echo abc && adf && echo 123 - 用
||
间隔,执行到正确命令会停止。
二元比较操作符,比较变量或者比较数字.
整数比较
1 | -eq 等于 if [ "$a" -eq "$b" ] |
比如 $a -eq 10
字符串比较
1 | = 等于 if [ "$a" = "$b" ] |
参考: shell脚本 if语句
字符串条件判断
1 | if [ "$net" = "0" ] |
注意:
- 左右方括号都要留空位,if后面也要有空位
- Shell下使用等号赋值时,左右两边不能有空位
- 一个等号和两个等号都可以
- then要另起一行,以if开头,以fi结尾
查找字符串
grep -r "struct event_base" -n
在当前目录查找字符串,找到后返回文件和对应的行
空格的有和没有
定义变量时, =号的两边不可以留空格1
gender=femal
条件测试语句 [ 符号的两边都要留空格1
if [ $gender = femal ]; then
条件测试的内容,如果是字符串比较的话, 比较符号两边要留空格1
if [ $gender = femal ]; then
如果if 和 then写在同一行, 那么,注意, then的前面要跟上 ; 号.如果 then 换行写, 那么也没问题.1
2if [ $gender = femal ]
then
命令和其后的参数或对象之间一定要有空格1
if [ -x"~/Workspace/shell/a.sh" ];then
取字符串的某一段
1 | #/bin/bash -e |
结果是:1
20
192.168
cut命令一般用于处理表内容,例如只取某一列
-c:仅显示行中指定范围的字符;
-d:指定字段的分隔符,默认的字段分隔符为”TAB”;
-f:显示指定字段的内容;
使用awk的内建函数:1
2
3hostname -I | awk '{split($0,a,".");print a[1],a[2],a[3],a[4]}' # 192 168 0 123
hostname -I | awk '{print substr($0,0,4)}' # 192.
所以如果想获得ip的网段,可以使用net=$(hostname -I | awk '{split($0,a,".");print a[3]}')
列出当前目录下,最大的10个文件
ls -Slh | head
连接字符串
如果想要在变量后面添加字符,可以用以下方法:1
2
3
4
5$value1=home
$value2=${value1}"=" # 用单引号也行
echo $value2
把要添加的字符串变量添加{},并且需要把$放到外面。这样输出的结果是home=
,连接成功。
echo
echo换行
echo要支持同C语言一样的\转义功能,只需要加上参数-e
echo -e “\n” 就是换行
echo -e $(cat test.txt)
其中test.txt
的内容:1
aaa \nbbb
结果就是:1
2aaa
bbb
不要加双引号,那样会保留下来
echo文本到文件
echo换行的文本1
2
3echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo $(cat 1.txt) > 2.txt
可以把文件1的内容复制到文件2。但如果文件1每行结尾没有加\n
,文件2的内容不会换行。另外这样会覆盖文件2原有的内容。如果不想覆盖,而是追加到文件2,只要把>
改为>>
即可