Linux 就会依据 /etc/passwd 文件的配置给我们一个 shell
1. 基础
Shell文件以.sh为后缀,
$ chmod +x test.sh,
$ ./test.sh
#!/bin/bash
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"
2. 变量
定义变量的时候无需用美元符$,使用变量时要加上$。
your_name="xujiguang"
echo $your_name
echo ${your_name} ->可选,但是原因。。。
变量重新赋值
myUrl="http://see.xidian.edu.cn/cpp/linux/"
echo ${myUrl}
#无需美元符
myUrl="http://see.xidian.edu.cn/cpp/shell/"
echo ${myUrl}
只读变量
myUrl="http://see.xidian.edu.cn/cpp/shell/"
readonly myUrl
删除变量
unset myUrl -->不能删除只读变量
Shell特殊变量
如果传递的参数有空格必须用""包围字符串
Shell特殊变量
$@和$*的区别
#./test.shell "china is a big contry"
a = 10
echo -e "Value of a is $a \\n" ->-e代表对转义字符进行替换,默认为-E不转义
3. 命令替换
#Shell可以先执行命令,将结果暂存
`command`
now_date = `date`
echo $now_date
USERS=`who | wc -l`
echo "Logged in user are $USERS"
4. 变量替换
Shell变量替换5. 运算符
#!/bin/bash
val=`expr 2 + 2`
echo "Total value : $val"
输出结果
Total value : 4
三点注意:
- 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
- 完整的表达式要被 \
\\
包含,注意这个字符不是常用的单引号,在 Esc 键下边。 - 乘法需要反斜杠转义 val=\
$a \\\\* $b
6. 条件语句
if [ $a == $b ]
then
echo "a is equal to b"
fi
- 注意点,条件表达式要放在[]之间,而且[$a==$b]是错误的写法,必须写成[ $a == $b ]
7. 关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a is equal to b"
else
echo "$a -eq $b : a is not equal to b"
fi
其他
运算符 | 说明 | 举例 |
---|---|---|
-ne | 检测两个数是否相等,不相等返回true | [ $a -eq $b ] |
-gt | 检测左边的数是否大于右边的数 | [ $a -gt $b ] |
-lt | 检测左边的数是否小于右边的数 | [ $a -lt $b ] |
-ge | 检测左边的数是否大于等于右边的数 | [ $a -ge $b ] |
-le | 检测左边的数是否小于等于右边的数 | [$a -le $b ] |
布尔运算符
a=10
b=20
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算 | [ !false] |
-o | 或运算 | [ $a -lt 20 -o $b -gt 100 ] 返回true |
-a | 与运算 | [ $a -lt 20 -a $b -gt 100 ] 返回 false |
字符串运算符
a="abc"
b="bcd"
运算符 | 说明 | 举例 |
---|---|---|
= | 检测字符串是否相等 | [ $a = $b ] 返回false |
!= | 检测字符串是否不相等 | [ $a != $b ] 返回true |
-z | 检测字符串长度是否为0 | [ -z $a ] 返回false |
-n | 检测字符串长度是否不为0 | [ -n $a ] 返回true |
str | 检测字符串是否为空 | [ $a ]返回true |
8.文件测试运算符
file = "/var/www/test.sh"
运算符 | 说明 | 举例 |
---|---|---|
-r | 文件是否可读 | 可读返回true |
-w | 文件是否可写 | 可写返回true |
-x | 文件是否可执行 | 可执行返回true |
-d | 是否是目录 | 是目录返回true |
-s | 文件大小是否为0 | 文件大小为0,返回true |
-e | 文件是否存在 | 存在返回true |
-f | 检测是否是普通文件(不是目录也不是设备文件) | 普通文件返回true |
9. 字符串
- 双引号中可以有变量
- 双引号中可以有转移字符
获取字符串长度
string = "abcd"
echo ${#string}
提取子串
string="alibaba is a greate company"
echo ${string:1:4} #输出liba [1:4]
查找子字符串
string="alibaba is a greate company"
echo `expr index "$string" is`
字符串
不知道是什么
变量配置方式 | 说明 |
---|---|
${变量#关键词} | 如果变量从头开始数据符合[关键词],则将符合的最短的删除 |
${变量##关键词} | 如果变量从头开始数据符合[关键词],则将符合的最长的删除 |
${变量%关键词} | 如果变量内容从尾向前的数据符合[关键词],则将符合最短的删除 |
${变量%%关键词} | 如果变量内容从尾向前的数据符合[关键词],则将符合最长的删除 |
${变量/旧字符串/新字符串} | 若变量内容符合[旧字符串]则[第一个旧字符串会被新字符串取代] |
${变量//旧字符串/新字符串} | 若变量内容符合[旧字符串]则[全部旧字符串会被新字符串取代] |
网友评论