ShelL(一):基础知识点

  • Shell环境有哪些?Linux默认的是哪个?
  • Shell脚本编程:文本编辑器+脚本解释器
  • 脚本解释器在Shell脚本中的体现:#! 指定shell程序
  • 运行Shell脚本的两种方法:可执行程序、作为解释器参数
  • 可执行程序这种运行方法,在执行过程中的注意事项?
    以上

  • Shell变量命名规范?
  • Shell变量赋值:显示赋值、用语句赋值举例?
  • Shell变量的使用:花括号与美元符号
  • Shell变量的使用与变量的二次赋值对变量的写法区别?
  • Shell设置只读变量:readonly
  • Shell删除变量:unset
  • Shell使用unset不能删除只读变量
#!/bin/bash
user_name="向雅"
readonly user_name
user_age="19"
echo ${user_name}
echo ${user_age}
unset user_name
unset user_age
echo ${user_name}
echo ${user_age}
  • Shell变量类型:局部变量、环境变量、Shell变量,三种变量的区别

  • Shell数据类型:数字、字符串
  • Shell字符串:单引号、双引号、无引号,两种引号的区别?
  • 字符串操作:拼接字符串、获取字符串长度、提取子字符串、查找字符串
#!/bin/bash
user_name="向雅"
str="my name is \"$user_name\"!"
echo -e $str
echo ${#str}
echo $str $user_name
echo ${str:0:2}
echo `expr index "$str" 向雅`
  • Shell数组:定义数组、读取数组数据、获取数组长度
  • Shell注释:单行、多行
#!/bin/bash
num_array=(1 2 3 4 5)
echo ${num_array[0]}
#获取数组中所有数据
echo ${num_array[@]}
#获取数组长度
echo ${#num_array[@]}
echo ${#num_array[*]}
echo ${#num_array[1]}
:<<EOF
多行注释
EOF

  • Shell传递参数:脚本设置,执行时传入 $n
#!/bin/bash
# test.sh

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
#执行test.sh
chmod +x test.sh 
 ./test.sh 1 2 3
  • Shell的几种参数格式: n n、 #、 @ @、 *
  • @ @与 *的区别:@单个字符串返回、*多个字符串拼成一个字符串返回

  • Shell算术运算:加、减、乘、除、取余、==、!=、赋值
#!/bin/bash
val=`expr 1 + 1`
echo $val
a=1
b=2
if [ $a == $b ]
then 
	echo "a等于b"
fi
if [ $a != $b ]
then 
	echo "a不等于b"
fi

-Shell关系运算:等于、不等于、大于、小于、大于等于、小于等于

#!/bin/bash
val=`expr 1 + 1`
echo $val
a=1
b=2
if [ $a -eq $b ]
then 
	echo "a等于b"
fi
if [ $a -ne $b ]
then 
	echo "a不等于b"
fi
if [ $a -gt $b ]
then 
	echo "a大于b"
fi
if [ $a -lt $b ]
then 
	echo "a小于b"
fi
if [ $a -ge $b ]
then 
	echo "a大于等于b"
fi
if [ $a -le $b ]
then 
	echo "a小于等于b"
fi
  • Shell布尔运算:与-a或-o非!
  • Shell逻辑运算:&& ||
  • Shell字符串运算:两个字符串是否相等 = !=、是否为空$、长度是否为0 -z、长度是否不为0 -n
#!/bin/bash
a=""
b="ab"
#其中一个比较对象是空的情况,需要如下写法,否则比较会异常
if [[ $a = $b ]]
then 
echo "a=b"
else 
echo "a!=b"
fi
#!/bin/bash

a="abc"
b="efg"

if [ $a = $b ]
then
   echo "$a = $b : a 等于 b"
else
   echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
   echo "-z $a : 字符串长度为 0"
else
   echo "-z $a : 字符串长度不为 0"
fi
if [ -n "$a" ]
then
   echo "-n $a : 字符串长度不为 0"
else
   echo "-n $a : 字符串长度为 0"
fi
if [ $a ]
then
   echo "$a : 字符串不为空"
else
   echo "$a : 字符串为空"
fi
  • Shell文件测试运算
    以上
#!/bin/bash

file="/var/www/runoob/test.sh"
if [ -r $file ]
then
   echo "文件可读"
else
   echo "文件不可读"
fi
if [ -w $file ]
then
   echo "文件可写"
else
   echo "文件不可写"
fi
if [ -x $file ]
then
   echo "文件可执行"
else
   echo "文件不可执行"
fi
if [ -f $file ]
then
   echo "文件为普通文件"
else
   echo "文件为特殊文件"
fi
if [ -d $file ]
then
   echo "文件是个目录"
else
   echo "文件不是个目录"
fi
if [ -s $file ]
then
   echo "文件不为空"
else
   echo "文件为空"
fi
if [ -e $file ]
then
   echo "文件存在"
else
   echo "文件不存在"
fi

  • Shell echo命令:输出字符串、转义、输出变量、输出换行、显示结果定向到文件、单引号原样输出、输出命令行执行结果
#!/bin/bash
a="123"
#单引号输出原样
echo '$a'
#输出变量
echo "$a"
#输出命令行执行结果
echo `date`
#输出换行
echo -e "123 \nabc"
#输出转义
echo "\"i am 西西\""

  • Shell printf命令:(1)format-string的用法+格式替代符;(2)转义序列
    格式替代符
    以上

  • Shell test命令:数值、字符、文件的判断;if test

  • Shell流程控制:条件、循环、跳出循环
  • 关于Linux let命令用法
#!/bin/bash
for loop in 1 2 3 4 5
do
	echo $loop
done

i=1
while(($i<=5))
do
	echo $i
	let "i++"
done

#无限循环
while :
do
	echo "12"
done

while true
do
	echo "12"
done

for (( ; ; ))


a=0

until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

  • Shell函数
#!/bin/bash
#无参函数
funDemo(){
echo "无参函数"
}
echo "执行函数"
funDemo
echo "函数执行完毕"

#有参函数
funDemoReturn(){
echo `expr $1 + $2`
}
funDemoReturn 1 2

  • Shell输入输出重定向
#执行命令,输出内容重定向到users文件【完全替换】
echo "菜鸟教程:www.runoob.com" > users
cat users

#执行命令,输出内容重定向到users文件【内容追加】
echo "百度网址:www.baidu.com" >> users
cat users

#统计users的行数
wc -l users

#输入内容重定向
wc -l < users

#注意:上面两个例子的结果不同:第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容。

  • Shell 文件描述符 0 1 2
  • Shell Here Document基本格式
<<aa
Here Document基本格式:
command << delimiter
    document
delimiter
它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。
aa

#统计EOF之间行数
wc -l << EOF
    欢迎来到
    菜鸟教程
    www.runoob.com
EOF

cat << EOF
欢迎来到
菜鸟教程
www.runoob.com
EOF
  • Shell /dev/null文件
#输出重定向到/dev/null,输出即被丢弃
#2>&1 表示标准输出与错误输出合并
echo "123" > /dev/null 2>&1

以上


  • Shell文件包含:Shell包含外部脚本,适用于封装一些公用的代码作为一个独立的文件。
#!/bin/bash
#创建文件test.sh
url="http://www.runoob.com"
#!/bin/bash
#创建test2.sh

#使用 . 号来引用test1.sh 文件
. ./test1.sh

# 或者使用以下包含文件代码
# source ./test1.sh

echo "菜鸟教程官网地址:$url"
#执行test2.sh
chmod +x test2.sh 
 ./test2.sh

注:被包含的文件 test1.sh 不需要可执行权限。

猜你喜欢

转载自blog.csdn.net/LittleGirl_orBoy/article/details/107935284