0 ./rh
1 ./type_test
1 ./ftp_down
17 .
# du -m |tr '-' ' ' |awk '{printf "%+12s %-10s\n",$1,$2}' |sort -n
0 ./rh
1 ./type_test
1 ./ftp_down
17 .
387250 2019-11-16 05:52:51.348258934 +0000 .
387287 2019-11-16 05:52:52.372263940 +0000 .
387324 2019-11-16 05:52:53.376268848 +0000 .
......
★ for循环
for i in 1 2 3; do echo "$i ---"; done
for i in `ls *.txt`; do echo $(ls -l $i);done
total=0; for (( i=1; i<=10; i++)); do total=$(( $total + $i )); done; echo $total;
★ while循环
i=1; while(($i<10)); do i=$(($i+1)); echo $i; done //表达式中间也可以没有空格
i=1; while(($i < 10)); do i=$(($i + 1)); echo $i; done
while(($i<10))
do
i=$(($i+1))
if(($i%2==0))
then
echo "--2x: $i"
fi
done
★ 计算器
expr 1 \* 2
echo $((3/2))
1
4.6
2.0
1.6
14.357
a+b=8.14
b/2=1.59236
[root@localhost ~]#
0x10
3
>>> int('11',2)
3
>>> int('f',16)
15
>>> int('17',8)
15
>>>
ls -1 |awk '{print "ls -l "$1}'
ls -1 |xargs -I {} echo ls -l {}
find *.rpm |xargs -I {} chmod u+x {}
5c9597f3c8245907ea71a89d9d39d08e
c8245907ea71a89d
[root@localhost home]#
5C9597F3C8245907EA71A89D9D39D08E
[root@localhost home]# md5sum a.txt | awk '{print tolower($1)}'
5c9597f3c8245907ea71a89d9d39d08e
★ expr
# expr length "abc"
3
# expr 3 / 2
1
# expr 3 \* 2
6
# expr substr "hello test" 1 2
he
# expr index "hello test" h
1
# expr index "hello test" e
2
# expr index "hello test" l
3
# expr index "hello test" hello
1
# expr index "hello test" test
2
# i=5; expr $i + 1
6
1 10.100.51.110
1 192.168.1.172
1 Address
1 servers)
2 10.100.1.90
38 127.0.0.1
Linux shell 中的几种括号的用法:
( )
用途1:在运算中,先计算小括号里面的内容
用途2:数组
用途3:匹配分组
(( ))
用途1:表达式,不支持-eq 这类的运算符。不支持-a 和-o,支持<=、>=、<、>这类 比较符和&&、||
用途2:C 语言风格的 for(())表达式
$( )
执行 Shell 命令,与反撇号等效,即与 `` 效果相同。例如:a=$(echo "test"); echo $a 和 a=`echo "test"`; echo $a; 效果相同都输出a的值test
$(( ))
用途1:简单算数运算
用途2:支持三目运算符 $(( 表达式?数字:数字 ))
[ ]
条件表达式,里面不支持逻辑判断符
[[ ]]
条件表达式,里面不支持-a 和-o,不支持<=和>=比较符,支持-eq、<、>这类比较 符。支持=~模式匹配,也可以不用双引号也不会影响原意,比[]更加通用
$[ ]
简单算数运算
{ }
对逗号 , 和点点 .. 起作用。例如:
touch {a,b} 创建 a和b 两个文件
touch {a..c} 创建 a,b,c 三个文件
touch {1,2} 创建 1和2 两个文件
touch {1..10} 创建 1,2,3,4,5,6,7,8,9,10 10个文件
for i in {1..10}; do echo $i; done 循环10次
${ }
用途1:引用变量。例如:a=100; echo ${a} 输出100,等同于 echo $a; 但 $a 和 ${a} 也有区别,例如:a=100; $a表示100,$a23,则不存在;而 ${a} 表示100,${a}23,则表示10023
用途2:字符串处理
Linux 中的常见变量:
a=100 普通设置变量的方式、无需提前申请,可以直接设置后使用变量。使用变量方式为:
$a
${a}
$$ :shell自身的PID
$! :shell最后运行的后台PID
$0 :shell自身脚本的文件名
$1~$n :shell脚本的各个入参值,$1 表示第一个参数,$2表示第二个
$# :shell脚本传入的入参的总个数(入参数量)
$? :上一条命令返回的结束代码(0表示正常,其他表示异常)
$* :shell脚本的所有参数的列表,若$*用""括起来,即"$*"表示以"$1 $2 ... $n"形式输出所有参数
$@ :shell脚本的所有参数的列表,若$@用""括起来,即"$@"表示以"$1" "$2" ... "$n"形式输出所有参数
$* 和 $@ :没用用引号包含起来时是一样的,都为"$1 $2 ... $n"形式输出
$() 等同于反引号``,运行一段命令
$(()) 进行数字运算,如echo $((a+b+c))
Linux shell 三目运算
[root@localhost home]# a=100; b=200; ((ret=a>b?1:0)); echo $ret;
0
[root@localhost home]# a=100; b=200; ((ret=a<b?1:0)); echo $ret;
1
[root@localhost home]# a=100; b=200; ((ret=$a>$b?1:0)); echo $ret;
0
[root@localhost home]# a=100; b=200; ((ret=$a<$b?1:0)); echo $ret;
1
[root@localhost home]# a=$((100<200?1:0)); echo $a
1
[root@localhost home]#
[root@localhost home]# a=$((100>200?1:0)); echo $a
0
只能用于数字,不能用于字符串,不支持下面这种写法:a=100; b=200; ((ret=a<b?"lt":"gt")); echo $ret;
关于:>/dev/null 2>&1
Linux上执行命令时经常会用到 >/dev/null 2>&1 ,例如:
标准输出stdout的信息重定向追加输出到日志文件 demo.log 中,错误输出stderr的信息等等同:
nohup java -jar demo.jar --spring.config.location=./application.yml >>demo.log 2>&1 &
标准输出stdout的信息重定向追加输出到空设备文件(丢弃),错误输出stderr的信息等等同:
nohup java -jar demo.jar --spring.config.location=./application.yml >/dev/null 2>&1 &
说明:
> :代表重定向到哪里。
/dev/null :代表空设备文件。
2> :代表标准错误stderr。
& :代表等同于1。2>&1 意思是2的输出重定向等同于1。
1 :代表标准输出stdout。
& :最后一个&代表后台运行。
>/dev/null 2>&1 也可以写成 1>/dev/null 2>&1
Linux shell中的函数定义、传参和调用: