Linux Shell命令

1、Hello Shell

需要以#!/bin/bash开头

#!/bin/bash
echo "Hello Shell"

需要有执行的权限

sh hello.sh
或者
./hello.sh

2、变量定义

2.1、赋值=前后不可有空格

#!/bin/bash

first_name="wxx"
last_name="lyy"

echo $first_name
echo $last_name

2.2、只读变量,和java里的final一样

#!/bin/bash

last_name="wxx"
readonly last_name
last_name="lyy"

2.3、字符串

#!/bin/bash

first_name="张"
last_name="三"

str="大家好,我叫${first_name}${last_name}"
echo $str

#字符串长度
echo ${#str}

#截取字符串,大家好
str1=${str:0:3}

2.4、数组

#shell中,只有一维数组,且长度不限,可以连续赋值,也可以不连续赋值

#!/bin/bash

array=(1 2 3 4 5)

array[7]=8
array[8]=9

#读取数组${array[index]},index替换成@可以获取数组中所有元素
echo ${array[4]}

#数组长度${#array[@]}或者${#array[*]}
echo ${#array[@]}


3、传递参数

#!/bin/bash

echo "shell file name:$0"
echo "first variable:$1"
echo "secondary variable:$2"
echo "all variable list:$*"
echo "variable num:$#"
#执行shell文件
sh test.sh hi ha

#输出
shell file name:test.sh
first variable:hi
secondary variable:ha
all variable list:hi ha
variable num:2

4、运算符

4.1、算术运算符

#!/bin/bash

val=`expr 2 + 3`
echo "2 + 3 = ${val}"

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b

4.2、关系运算符

运算符	说明	举例
-eq	检测两个数是否相等,相等返回 true。	[ $a -eq $b ] 返回 false。
-ne	检测两个数是否不相等,不相等返回 true。	[ $a -ne $b ] 返回 true。
-gt	检测左边的数是否大于右边的,如果是,则返回 true。	[ $a -gt $b ] 返回 false。
-lt	检测左边的数是否小于右边的,如果是,则返回 true。	[ $a -lt $b ] 返回 true。
-ge	检测左边的数是否大于等于右边的,如果是,则返回 true。	[ $a -ge $b ] 返回 false。
-le	检测左边的数是否小于等于右边的,如果是,则返回 true。	[ $a -le $b ] 返回 true。

4.3、布尔运算符

运算符	说明	举例
这里a = 10  b = 20
!	非运算,表达式为 true 则返回 false,否则返回 true。	[ ! false ] 返回 true。
-o	或运算,有一个表达式为 true 则返回 true。	[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a	与运算,两个表达式都为 true 才返回 true。	[ $a -lt 20 -a $b -gt 100 ] 返回 false。

4.4、逻辑运算符

运算符	说明	举例
这里a = 10  b = 20
&&	逻辑的 AND	[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||	逻辑的 OR	[[ $a -lt 100 || $b -gt 100 ]] 返回 true

4.4、字符串运算符

运算符	说明	举例
这里a = abc b = efg
=	检测两个字符串是否相等,相等返回 true。	[ $a = $b ] 返回 false。
!=	检测两个字符串是否不相等,不相等返回 true。	[ $a != $b ] 返回 true。
-z	检测字符串长度是否为0,为0返回 true。	[ -z $a ] 返回 false。
-n	检测字符串长度是否不为 0,不为 0 返回 true。	[ -n "$a" ] 返回 true。
$	检测字符串是否为空,不为空返回 true。	[ $a ] 返回 true。

4.5、文件运算符

操作符	说明	举例
-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。

5、流程控制

5.1、if判断

语法:
if condition
then
    xxxx
elif condition
then
    xxxx
else
    xxxx
fi
#!/bin/bash

#输入一个参数,判断奇偶性

if [ $# -eq 0 -o $1 -eq 0 ]
then
        echo "请输入一个合理的参数"
else
val=`expr $1 % 2`
case $val in
        1) echo "${1}是奇数"
        ;;
        0) echo "${1}是偶数"
        ;;
esac
fi

5.2、for循环

语法
for item in item1 item2 ... itemN
do
    xxxxxx
done

案例
i=1
for ((i=2; i<=100; i+=10))
do
	echo $i
done
输出2 12 22 ... 92

for i in `seq 100 110`
do
	echo $i
done
输出 100 101 ... 110

死循环
for (( ; ; ))

5.3、while循环

语法
while condition
do
    xxxx
done

案例
i=1
while (( $i<=100 ))
do
	echo $i
	i=$( expr $i + 10 )
done
输出 1 11 21 ... 91

死循环
while true
do
    xxxx
done

5.4、case when

语法
case val in
    val1)  xxxx
    ;;
    val2|val3|val4)  xxxx
    ;;
    *) xxxx
    ;;
esac

5.6、其他命令

break  跳出所有循环

continue 跳出本次循环

exit; 结束当前shell脚本

6、function

语法
[function] functionName[()]{
    xxx
    return xxx
}

[function]可以省略,直接函数名

案例
funcAdd(){
    val=`expr $1+$2`
    return val
}

#调用函数
funcAdd 1 1
#输出返回参数
echo $?

7、CUT

cut  [-bn] [file]
cut [-c] [file]
cut [-df] [file]
使用说明:

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

参数:

-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除

例如从ifconfig中截取到ip地址

可以看到ip地址在第二行,所以利用grep查到当前行,再用cut分割截取

 8、AWK

8.1、基本使用

语法
awk [选项参数] -f scriptfile var=value file(s)
------------------------------------------------

案例
log.txt内容如下
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
------------------------------------------------

8.2、分割

执行,以tab或空格分割 输出第一列和第四列
$ awk '{print $1,$4}' log.txt
2 a
3 like
This's
10 orange,apple,mongo
------------------------------------------------

格式输出
$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
------------------------------------------------

使用-F指定分隔符,以,为分隔符
$ awk -F, '{print $1,$2}'   log.txt
------------------------------------------------

或者使用内建变量
$ awk 'BEGIN{FS=","} {print $1,$2}'     log.txt
------------------------------------------------

使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
$ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值