Shell
2020-12-17 14:33:44 38 举报
AI智能生成
Shell是一种命令行解释器,是操作系统与用户进行交互的重要工具。它为用户提供了一个向操作系统发送指令的平台,用户可以通过输入特定的命令来完成各种操作,如文件管理、系统设置、进程控制等。Shell不仅可以执行基本的命令,还可以通过编写脚本来自动化任务,提高工作效率。Shell的语法简洁明了,功能强大,是程序员和系统管理员的必备工具。
作者其他创作
大纲/内容
#!
#!/bin/sh
#!/bin/bash
注释
单行注释
#
多行注释
:<<EOF
注释内容
注释内容
EOF
注释内容
注释内容
EOF
变量
命名
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
区分大小写
中间不能有空格
不能使用标点符号
不能使用关键字
赋值
字符串
表达
string='my_str'
string="my_str"
string=my_str
使用
${#string}
${string:start_index:end_index}
`expr index "$string" search_str`
数组
表达
数组名=(值1 值2 ... 值n)
array_name=(value0 value1 value2 value3)
array_name=(
value0
value1
)
value0
value1
)
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
array_name[1]=value1
array_name[n]=valuen
使用
${my_array[index]}
${my_array[*]}
${my_array[@]}
${my_array[@]}
${#my_array[@]}
${#my_array[*]}
${#my_array[*]}
只读
readonly temp
删除
unset temp
引用
$temp
${temp}
类型
用户自定义变量
环境变量
$HOME
$PATH
$PS1
$PS2
$IFS
$0
$#
$$
位置参数变量
$1、$2、...
$*
$@
预定义变量
位置参数变量
$?
$!
$-
运算符
算术运算符
=
a=$b
+
`expr 20 + 10`
-
`expr 20 - 10`
*
`expr 20 * 10`
/
`expr 5 / 2`
%
`expr 5 % 2`
==
`expr 20 == 10`
!=
`expr 20 != 10`
位运算符
<<
5 << 2 = 20
-5 << 2 = -20
-5 << 2 = -20
>>
5 >> 2 = 1
-5 >> 2 = -2
-5 >> 2 = -2
&
5 & 2 = 0
-5 & 2 = 2
-5 & 2 = 2
|
5 | 2 = 7
-5 | 2 = -5
-5 | 2 = -5
^
5 ^ 2 = 7
-5 ^ 2 = -7
-5 ^ 2 = -7
~
~5 = -6
~-5 = 4
~-5 = 4
关系运算符
-eq
[ 20 -eq 10 ]
-ne
[ 20 -ne 10 ]
-gt
[ 20 -gt 10 ]
-ge
[ 20 -ge 10 ]
-lt
[ 20 -lt 10 ]
-le
[ 20 -le 10 ]
布尔运算符
!
[ ! false ]
-o
[ 10 -lt 20 -o 20 -gt 100 ]
-a
[ 10 -lt 20 -a 20 -gt 100 ]
逻辑运算符
&&
[[ 10 -lt 100 && 20 -gt 100 ]]
||
[[ 10 -lt 100 || 20 -gt 100 ]]
字符串运算符
=
[ "abc" = "def" ]
!=
[ "abc" != "def" ]
-z
[ -z "abc" ]
-n
[ -n "abc" ]
$
[ $string ]
文件测试运算符
-b
[ -b $file ]
-c
[ -c $file ]
-d
[ -d $file ]
-f
[ -f $file ]
-k
[ -k $file ]
-p
[ -p $file ]
-u
[ -u $file ]
-g
[ -g $file ]
-r
[ -r $file ]
-w
[ -w $file ]
-x
[ -x $file ]
-s
[ -s $file ]
-e
[ -e $file ]
-S
[ -S $file ]
-L
[ -L $file ]
命令
输入
read [OPTIONS] [ARGUMENTS]
read -p "请输入一个数num1=" NUM1
read -t 10 -p "请在10秒内输入一个数num2=" NUM2
select
同流程控制中的select
输出
echo [OPTIONS] [ARGUMENTS]
echo "\"A\""
echo -e "A\nA"
echo -e "A\c"
echo "A"
echo "A"
printf [FORMAT-STRING] [ARGUMENTS]
printf "%-10s %-8s %-4s\n" A B C
printf '%d %s\n' 1 "abc"
printf %s abcdef
printf %s abc def
printf "%s and %d \n"
检查
test
test $str1 = $str2
[ ]
[ "$str1" != "$str2" ]
模式匹配
[[ ]]
[[ hello == hell? ]]
数学运算
$[ ]
$[$a + $b]
$[a + b]
$(( ))
$(($a + $b))
$((a + b))
命令替换
$( )
a=$(expr 1 + 1)
` `
a=`expr 1 + 1`
变量替换
${ }
${变量#关键词}
${变量##关键词}
${变量%关键词}
${变量%%关键词}
${变量/旧关键词/新关键词}
${变量//旧关键词/新关键词}
路径/文件名
basename [PATHNAME] [SUFFIX]
basename /usr/bin/sort
basename include/stdio.h
basename include/stdio.h .h
dirname [PATHNAME]
dirname /usr/bin/
dirname dir1/str dir2/str
dirname stdio.h
流程控制
if
if 条件
then
操作
fi
then
操作
fi
if 条件
then
操作1
else
操作2
fi
then
操作1
else
操作2
fi
if 条件1
then
操作1
elif 条件2
then
操作2
else
操作3
fi
then
操作1
elif 条件2
then
操作2
else
操作3
fi
case
case 变量 in
模式1 [ | 模式12 ] ... )
操作1
;;
模式2 [ | 模式22 ] ... )
操作2
;;
...
esac
模式1 [ | 模式12 ] ... )
操作1
;;
模式2 [ | 模式22 ] ... )
操作2
;;
...
esac
for
for 变量 in 列表变量
do
操作
done
do
操作
done
while
while 条件
do
操作
done
do
操作
done
until
until 条件
do
操作
done
do
操作
done
break
continue
select
select var in 列表变量
do
break;
done
do
break;
done
echo "请选择一个选项:"
select var in "A" "B" "C" "D"; do
break;
done
echo "您的选项是:$var"
select var in "A" "B" "C" "D"; do
break;
done
echo "您的选项是:$var"
loop
函数
[ function ] 函数名 [()]
{
操作;
[return 返回值;]
}
{
操作;
[return 返回值;]
}
my_func(){
echo "hello"
}
my_func
echo "hello"
}
my_func
function my_func(){
echo "hello"
return 0;
}
my_func
echo $?
echo "hello"
return 0;
}
my_func
echo $?
my_add()
{
result=0
for i in $*
do
result=`expr $result + $i`
done
return $result
}
my_add 1 2 3
echo $?
{
result=0
for i in $*
do
result=`expr $result + $i`
done
return $result
}
my_add 1 2 3
echo $?
文件包含
. filename
source filename
运行
./test.sh
bash test.sh
sh test.sh
0 条评论
下一页