当前位置:   article > 正文

shell基础语法(持续更新ing)_shell 提示readonly variable后退出

shell 提示readonly variable后退出

一、变量

#!/bin/bash
echo "hello shell"
  • 1
  • 2

hello shell

# 变量
bianliang='变量'
b=2
echo $b
echo $bianliang;
bianliang_1='变量1'
echo ${bianliang_1}
_bianliang='变量2'
echo $_bianliang
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2
变量
变量1
变量2

_readonly_='只读变量'
echo $_readonly_
readonly _readonly_
_readonly_='只读属性,不能修改,会报错'
  • 1
  • 2
  • 3
  • 4

只读变量

script.sh: line 5: readonly: readonly variable

Exited with error status 1

_unset='删除变量'
echo ${_unset}
unset _unset
echo $_unset
  • 1
  • 2
  • 3
  • 4

删除变量

二、字符串

# 字符串
str1='单引号字符串'
echo ${str1}
str2="双引号字符串"
echo $str2
str3="双引号字符串\"${str1}\""
echo $str3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

单引号字符串
双引号字符串
双引号字符串"单引号字符串"

# 字符串拼接
str1="我是"
str2="拼接"
str3="字符串"
echo $str1$str2$str3

# 获取字符串长度
echo ${#str3}

# 提取子字符串
str="i love shell"
echo ${str:1:5}

# 查找子字符串
# 查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
echo `expr index "$str" io`
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

我是拼接字符串
3
love
1

三、数组

stu=(zhangsan lisi wangwu)
echo ${stu[0]}
echo ${stu[1]}
echo ${stu[2]}
stu[4]='D'
stu[5]=6
stu[6]="F"
# 输出所有值
echo ${stu[*]}
# 数组长度
echo ${#stu[*]}
# 修改值
stu[2]=3
echo ${stu[*]}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

zhangsan
lisi
wangwu
zhangsan lisi wangwu D 6 F
6
zhangsan lisi 3 D 6 F

四、传参

#!/bin/bash
echo "Shell 传递参数实例!";
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
  • 1
  • 2
  • 3
  • 4
  • 5
$ chmod +x test.sh 
$ ./test.sh 1 2 3
  • 1
  • 2

Shell 传递参数实例!
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3

五、运算符

1、算数运算符

a=40
b=5
c=`expr $a + $b`
echo "a+b=$c"
c=`expr $a - $b`
echo "a-b=$c"
c=`expr $a \* $b`
echo "a*b=$c"
c=`expr $a / $b`
echo "a/b=$c"
c=`expr $a % $b`
echo "a%b=$c"
c=$a
echo "c=a=$c"
if [ $a == $b ]
then
	echo 'a等于b'
fi
if [ $a != $b ]
then
	echo 'a不等于b'
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

a+b=45
a-b=35
a*b=200
a/b=8
a%b=0
c=a=40
a不等于b

2、关系运算符

a=5
b=5
c=10
echo "a=$a,b=$b,c=$c"
if [ $a -eq $b ]
then
	echo "a等于b是 -eq"
fi
if [ $a -ne $c ]
then
	echo "a不等于b是 -ne"
fi
if [ $c -gt $a ]
then
	echo "左边大于右边是 -gt"
fi
if [ $a -lt $c ]
then
	echo "右边大于左边是 -lt"
fi
if [ $a -ge $b ]
then
	echo "左边大于等于右边是 -ge"
fi
if [ $a -le $b ]
then
	echo "左边小于等于右边是 -le"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

a=5,b=5,c=10
a等于b是 -eq
a不等于b是 -ne
左边大于右边是 -gt
右边大于左边是 -lt
左边大于等于右边是 -ge
左边小于等于右边是 -le

3、布尔运算符

a=5
b=5
c=10
echo "a=$a,b=$b,c=$c"

if [ $a == $b -a $c -gt $b ]
then
	echo "与是 -a"
fi

if [ $a == $b -o $a == $c ]
then
	echo "或是 -o"
fi

if [ !false ]
then
	echo "非是 !"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

a=5,b=5,c=10
与是 -a
或是 -o
非是 !

4、逻辑运算符

a=5
b=5
c=10
echo "a=$a,b=$b,c=$c"
# 注意双层[[]]
if [[ $a == $b && $b -ne $c ]]
then
	echo "and 是 &&"
fi

if [[ $a -eq $b || $a -eq $b ]]
then
	echo "or是 ||"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

a=5,b=5,c=10
and 是 &&
or是 ||

5、字符串运算符

运算符说明举例
=检测两个字符串是否相等,相等返回 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。

6、文件测试运算符

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

六、流程控制

1、if

a=10
b=20
c=30
d=10
# if
echo "********** if **********"
if [ $a -eq $d ]
then
	echo "a=$a=$d=d"
fi

# if else
echo "********** if else **********"
if test $b -gt $c
then
	echo "b=$b>$c=c"
else
	echo "b=$b<$c=c"
fi

# if elif else 
echo "********** if elif else **********"
if [ $a -eq $b ]
then
	echo "a=$a=$b=b"
elif [ $a -gt $b ]
then
	echo "a=$a>$b=b"
else
	echo "a=$a<$b=b"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

********** if **********
a=10=10=d
********** if else **********
b=20<30=c
********** if elif else **********
a=10<20=b

2、for

for num in 1 2 3 4 5
do
	echo $num
done

for str in this is for_loop
do
	echo $str
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1
2
3
4
5
this
is
for_loop

3、while

输出500以内7的倍数:

#!/bin/bash
i=0
while(( $i<=500 ))
do
	if(( $i%7==0 )
	then
		echo $i
	fi
	let "i++"
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4、

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/288171
推荐阅读
相关标签
  

闽ICP备14008679号