龚哥哥 - 山里男儿 爱生活、做自己!
Shell使用教程
发表于 2016-4-12 | 服务器
#!/bin/sh

# # 用户输入数据获取
# echo "What is your name?"
# read PERSON
# echo "Hello, $PERSON"

# # 定义变量,在变量名前面不需要加¥符号,使用的时候才需要加
# # 定义变量
# ret="value"
# echo $ret

# # 重新定义变量
# ret="value-ssss"
# echo $ret

# # 数字型变量
# number=100
# echo $number # line 22: unset: `value-ssss': not a valid identifier

# # 删除变量
# unset $ret
# echo $ret

# # 字符串循环,变量与字符串混合使用的使用加{}花括号
# # 推荐使用变量的时候,加花括号
# str="Ada Coffa Action Java"
# for v in $str
# do
#   echo "I am good at ${v}Script"
# done

# 字符串可以是单引号或者双引号,单引号中变量当做字符串输出,双引号中支持变量
# ret="ret string"
# # 单引号中不能带单引号,就是加了反斜杠转义也不可以
# # str='hello world \' $ret'
# str='hello world $ret ${ret}'
# echo $str
# str="Hello World Is \"$ret\""
# echo $str

# # 字符串拼接
# xing='Fu'
# strs="Gong "$xing" Xiang"
# name="Gong ${xing} Xiang"

# echo $strs
# echo $name

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

# # 提取子字符串
# echo ${name:4} # Fu Xiang
# echo ${name:1:5} # ong F

# # 查找子字符串,有问题
# # echo `expr index "$name" Fu`

# # 数组
# # 数组名=(值1 值2 值3 ... 值n)
# # 如:arr=(1 2 3 4 5 6)
# arr=(11 2222 3 44 5 6)
# echo $arr # 默认第一个下标元素 11
# echo ${arr[0]} # 第一个元素 11
# echo ${arr[1]} # 第二个元素 2222
# echo ${arr[*]} # 所有元素 11 2222 3 44 5 6
# echo ${arr[@]} # 所有元素 11 2222 3 44 5 6
# echo ${#arr[*]} # 数组的长度(下标1开始) 6
# echo ${#arr[@]} # 数组的长度(下标1开始) 6
# echo ${#arr[1]} # 元素1的长度 4(下标0开始)
# arr[1]="new values heihei"
# echo ${arr[1]}

# # 传递参数,没有参数则空
# # sh testshell.sh 11 22 你好世界
# echo "第一个参数:${1}"  # 11
# echo "第二个参数:${2}"  # 22
# echo "第三个参数:${3}"  # 你好世界
# echo "参数个数:${#}"  # 3
# echo "以一个但字符串显示所有脚本传递的参数:${*}"  # 11 22 你好世界
# echo "脚本运行的当前进程ID号:${$}"  # 当前进程ID号
# echo "后台运行的最后一个进程的ID号:${!}"
# echo "与$*相同,但是使用时加引号,并在引号中返回每个参数:${@}"  # 11 22 你好世界
# echo "显示Shell使用的当前选项,与set命令功能相同:${-}"  # hB
# echo "显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误:${?}"  # 0或错误

# 基本运算符
# 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
# expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
# 完整的表达式需要被 ` 符号包含(不是单引号)
# 乘法 * 必须加反斜杠
# val=`expr 2 + 2` # 2+2是不对的,中间必须空格分开
# echo "两数之和为:${val}"
# num1=1
# num2=2
# num3=3
# echo "num1+num2:`expr ${num1} + ${num2}`"   # 3
# echo "num3-num1:`expr ${num3} - ${num1}`"   # 2
# echo "num2*num3:`expr ${num2} \* ${num3}`"  # 6
# echo "num3/num2:`expr ${num3} / ${num2}`"   # 1
# echo "num3%num2:`expr ${num3} % ${num2}`"   # 1

# # if判断语句
# if [ $num1 == $num2 ]
# then
#   echo "num1等于num2"
# fi
# if [ $num1 != $num2 ]
# then
#   echo "num1不等于num2"
# fi

# # 关系运算符、不支持字符串、只支持数字
# # -eq 等于、-ne 不等于、-gt 大于、-lt 小于、-ge 大于等于、-le 小于等于
# if [ $num1 -eq $num2 ]
# then
#   echo "num1等于num2"
# fi
# if [ $num1 -ne $num2 ]
# then
#   echo "num1不等于num2"
# fi
# if [ $num2 -gt $num1 ]
# then
#   echo "num2大于num1"
# fi
# if [ $num1 -lt $num2 ]
# then
#   echo "num1小于num1"
# fi

# # 布尔运算符
# # ! 非运算(取反)、-o 或运算(一个符合就true)、-a 与运算(需要都符合就true)
# if [ ! $num1 == $num2 ]
# then
#   echo "num1不等于num2"
# fi
# if [ $num1 -ne $num2 -a $num2 -lt $num3 ]
# then
#   echo "条件成立"
# fi

# # 字符串运算符
# str1="abc"
# str2="efg"
# str3="abc"
# if [ $str1 = $str3 ]
# then
#   echo "str1等于str3"
# fi
# if [ $str1 != $str2 ]
# then
#   echo "str1不等于str2"
# fi
# if [ -z $str1 ]
# then
#   echo "str1长度为0"
# fi
# if [ -n $str1 ]
# then
#   echo "str1长度不为0"
# fi
# if [ $str1 ]
# then
#   echo "str1不为空"
# fi

# # 文件运算符
# dir="/data/"
# file="hello.txt"
# if [ -e ${dir}${file} ]
# then
#   echo "${file}文件存在"
# else
#   echo "${file}文件不存在"
# fi
# if [ -s ${dir}${file} ]
# then
#   echo "${file}文件大小大于0"
# else
#   echo "${file}文件大小等于0"
# fi
# if [ -x ${dir}${file} ]
# then
#   echo "${file}文件可执行"
# else
#   echo "${file}文件不可执行权限(755后几可执行了)"
# fi
# if [ -w ${dir}${file} ]
# then
#   echo "${file}文件可写"
# else
#   echo "${file}文件不可写"
# fi
# if [ -f ${dir}${file} ]
# then
#   echo "${file}文件是普通文件"
# else
#   echo "${file}文件不是普通文件"
# fi
# if [ -f "${dir}testshell.sh" ]
# then
#   echo "testshell.sh文件是普通文件"
# else
#   echo "testshell.sh文件不是普通文件"
# fi

# # echo 命令
# echo "it is s test"
# echo "\"id is a ' test\""
# read name # 接收键盘录入数据
# # > 覆盖文件中的内容、>>尾部追加内容
# echo "${name} it is a test `date`" >> ${dir}${file} # 讲内容写入文件
# cat ${dir}${file} # 查看文件中的内容

# # printf 命令
# echo "Hello World"
# printf "Hello World\n"

# printf "%-10s %-10s %-10s\n" 姓名 性别 体重kg
# printf "%-12s %-10s %-10.2f\n" 龚福祥 男 52.25453
# printf "%-12s %-10s %-10.2f\n" 潘玉龙 男 48.34566
# printf "%-11s %-10s %-10.2f\n" 杨过 男 60

# printf "%d %s\n" 100 "abc"
# printf '%d %s\n' 200 "efg"
# printf '%d %s %s %s\n' 300 "Hello" "World" "!"
# printf %s abc efg
# printf "\n\n"
# printf "%s\n" abcc efgg
# printf "www.gongfuxiang.com \n"

# # 控制流程
# num1=100
# num2=100
# if [ $num1 -eq $num2 ]
# then
#   echo "num1等于num2"
# else
#   echo "num1不等于num2"
# fi

# arr=(11 22 33 44 55)
# str="1 2 3 4 5"
# for index in ${arr[*]}
# #for index in $str
# do
#   echo "index the is: ${index}"
# done
# for tmp in 'Hello World'
# do
#   echo $tmp
# done

# int=0
# while(($int <= 5))
# do
#   let "int++"

#   # case 语句
#   case $int in
#       2 | 5)
#           echo "case int is ${int}"
#       ;;
#       4)
#           echo "case int is ${int}"
#       ;;
#   esac

#   # int等于2的时候跳出当前循环
#   if [ $int -eq 2 ]
#   then
#       continue
#   fi

#   # int等于4的时候结束循环
#   if [ $int -eq 5 ]
#   then
#       break
#   fi

#   echo "int is ${int}"
# done

# # function 方法
# # 函数调用必须在调用之前
# function DemoFun()
# {
#   echo "demofun()"
# }
# # 函数调用
# echo "函数执行开始"
# DemoFun
# echo "函数执行完毕"

# # 用户输入的值进行相加返回
# function WitchReturn()
# {
#   echo "输入第一个数字:"
#   read num

#   echo "输入第二个数字:"
#   read another
#   return $(($num+$another))
# }
# # 函数返回值使用 $? 来获取
# WitchReturn
# echo $?

# # 函数参数传递获取
# function FunParam()
# {
#   echo "第一个参数:${1}"
#   echo "第二个参数:${2}"
#   echo "第三个参数:${5}"
#   echo "所有参数:${*}"
#   echo "参数个数:${#}"
# }
# FunParam 11 22 33 "aa" "bb"

# # 输入/输出重定向
# file="hello.txt"

# # 尾部追加内容
# echo "gongfuxiang.com 龚福祥" > $file

# # 覆盖文件中的内容
# echo "gongfuxiang.org" >> $file

# # 文件中的内容行数
# #wc -l $file # 会输出文件名
# wc -l < $file # 不会输出文件名

# cat $file

# # 结果
# #     Devil
# # www.gongfuxiang.com
# cat << EOF
#   Devil
#   www.gongfuxiang.com
# EOF

# # 结果 2
# wc -l  << EOF
#   Devil
#   www.gongfuxiang.com
# EOF

# # 命令执行的内容不显示在终端上
# ls > /dev/null

# # 文件引入 source关键字或 .
# # testshell.sh testshell2.sh
# #. ./testshell2.sh
# source ./testshell2.sh

# # 使用变量
# echo $url

# # 使用方法
# ShellTestFun

# # (()) 双小括号的使用
# a=1
# b=2
# as=$((a+=1)) # 2
# echo $as
# echo $((a+=2)) # 4

# bs=$((b+1)) # 3
# echo $bs
# echo $((b+=2)) # 4

# # 表达式多个值
# c=1
# d=1
# e=1
# $((c++, d++, e--))
# # c,d,e 结果2,2,0
# echo $c
# echo $d
# echo $e

# # for循环
# for((i=0; i<=10; i++))
# do
#   echo $i
# done

# 创建测试目录
dir_name="shell_test"

mkdir $dir_name

read number
for((i=0; i<=$number; i++))
do
    # 在目录下循环创建多个文件
    touch "${dir_name}/test_file_${i}.txt"
done

发表评论:

TOP